xapian-core  2.0.0
Functions
io_utils.h File Reference

Wrappers for low-level POSIX I/O routines. More...

#include <sys/types.h>
#include "safefcntl.h"
#include "safeunistd.h"
#include <string>
+ Include dependency graph for io_utils.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

int io_open_block_rd (const char *filename)
 Open a block-based file for reading. More...
 
int io_open_block_rd (const std::string &filename)
 Open a block-based file for reading. More...
 
int io_open_block_wr (const char *filename, bool anew)
 Open a block-based file for writing. More...
 
int io_open_block_wr (const std::string &filename, bool anew)
 Open a block-based file for writing. More...
 
int io_open_stream_rd (const char *filename)
 Open a stream-based file for reading. More...
 
int io_open_stream_rd (const std::string &filename)
 Open a stream-based file for reading. More...
 
int io_open_stream_wr (const char *filename, bool anew)
 Open a stream-based file for writing. More...
 
int io_open_stream_wr (const std::string &filename, bool anew)
 Open a stream-based file for writing. More...
 
bool io_sync (int fd)
 Ensure all data previously written to file descriptor fd has been written to disk. More...
 
bool io_full_sync (int fd)
 
size_t io_read (int fd, char *p, size_t n, size_t min=0)
 Read n bytes (or until EOF) into block pointed to by p from file descriptor fd. More...
 
void io_write (int fd, const char *p, size_t n)
 Write n bytes from block pointed to by p to file descriptor fd. More...
 
void io_write (int fd, const unsigned char *p, size_t n)
 
size_t io_pread (int fd, char *p, size_t n, off_t o, size_t min=0)
 Read n bytes (or until EOF) into block pointed to by p from file descriptor fd starting at position o. More...
 
void io_pwrite (int fd, const char *p, size_t n, off_t o)
 Write n bytes from block pointed to by p to file descriptor fd starting at position o. More...
 
bool io_readahead_block (int, size_t, off_t, off_t=0)
 Readahead block b size n bytes from file descriptor fd. More...
 
void io_read_block (int fd, char *p, size_t n, off_t b, off_t o=0)
 Read block b size n bytes into buffer p from file descriptor fd, offset o. More...
 
void io_write_block (int fd, const char *p, size_t n, off_t b, off_t o=0)
 Write block b size n bytes from buffer p to file descriptor fd, offset o. More...
 
void io_write_block (int fd, const unsigned char *p, size_t n, off_t b)
 
bool io_unlink (const std::string &filename)
 Delete a file. More...
 
bool io_tmp_rename (const std::string &tmp_file, const std::string &real_file)
 Rename a temporary file to its final position. More...
 

Detailed Description

Wrappers for low-level POSIX I/O routines.

Definition in file io_utils.h.

Function Documentation

◆ io_full_sync()

bool io_full_sync ( int  fd)
inline

Definition at line 122 of file io_utils.h.

References io_sync().

Referenced by GlassVersion::sync(), HoneyVersion::sync(), and test_ioblock1().

◆ io_open_block_rd() [1/2]

int io_open_block_rd ( const char *  filename)
inline

Open a block-based file for reading.

Parameters
filenameThe path of the file to open.

Definition at line 38 of file io_utils.h.

References O_BINARY, O_CLOEXEC, and Xapian::Remote::open().

Referenced by GlassTable::do_open_to_read(), io_open_block_rd(), and test_ioblock1().

◆ io_open_block_rd() [2/2]

int io_open_block_rd ( const std::string &  filename)
inline

Open a block-based file for reading.

Parameters
filenameThe path of the file to open.

Definition at line 46 of file io_utils.h.

References io_open_block_rd().

◆ io_open_block_wr() [1/2]

int io_open_block_wr ( const char *  filename,
bool  anew 
)

Open a block-based file for writing.

Parameters
filenameThe path of the file to open.
anewIf true, open the file anew (create or truncate it).

Definition at line 192 of file io_utils.cc.

References move_to_higher_fd(), O_BINARY, O_CLOEXEC, Xapian::Remote::open(), and protect_from_write().

Referenced by GlassTable::do_open_to_write(), io_open_block_wr(), and test_ioblock1().

◆ io_open_block_wr() [2/2]

int io_open_block_wr ( const std::string &  filename,
bool  anew 
)
inline

Open a block-based file for writing.

Parameters
filenameThe path of the file to open.
anewIf true, open the file anew (create or truncate it).

Definition at line 63 of file io_utils.h.

References io_open_block_wr().

◆ io_open_stream_rd() [1/2]

int io_open_stream_rd ( const char *  filename)
inline

Open a stream-based file for reading.

Parameters
filenameThe path of the file to open.

Definition at line 72 of file io_utils.h.

References O_BINARY, O_CLOEXEC, and Xapian::Remote::open().

Referenced by io_open_stream_rd(), and BufferedFile::open().

◆ io_open_stream_rd() [2/2]

int io_open_stream_rd ( const std::string &  filename)
inline

Open a stream-based file for reading.

Parameters
filenameThe path of the file to open.

Definition at line 80 of file io_utils.h.

References io_open_stream_rd().

◆ io_open_stream_wr() [1/2]

int io_open_stream_wr ( const char *  filename,
bool  anew 
)

Open a stream-based file for writing.

Parameters
filenameThe path of the file to open.
anewIf true, open the file anew (create or truncate it).

Definition at line 231 of file io_utils.cc.

References move_to_higher_fd(), O_BINARY, O_CLOEXEC, and Xapian::Remote::open().

Referenced by io_open_stream_wr(), and BufferedFile::open().

◆ io_open_stream_wr() [2/2]

int io_open_stream_wr ( const std::string &  filename,
bool  anew 
)
inline

Open a stream-based file for writing.

Parameters
filenameThe path of the file to open.
anewIf true, open the file anew (create or truncate it).

Definition at line 97 of file io_utils.h.

References io_open_stream_wr().

◆ io_pread()

size_t io_pread ( int  fd,
char *  p,
size_t  n,
off_t  o,
size_t  min = 0 
)

Read n bytes (or until EOF) into block pointed to by p from file descriptor fd starting at position o.

If a read error occurs, throws DatabaseError.

If min is specified and EOF is reached after less than min bytes, throws DatabaseCorruptError.

The current file position may or may not be updated.

Returns the number of bytes actually read.

Definition at line 277 of file io_utils.cc.

References p, rare, and usual.

Referenced by BufferedFile::read().

◆ io_pwrite()

void io_pwrite ( int  fd,
const char *  p,
size_t  n,
off_t  o 
)

Write n bytes from block pointed to by p to file descriptor fd starting at position o.

If a read error occurs, throws DatabaseError.

The current file position may or may not be updated.

Definition at line 363 of file io_utils.cc.

References io_write(), p, rare, and usual.

◆ io_read()

size_t io_read ( int  fd,
char *  p,
size_t  n,
size_t  min = 0 
)

Read n bytes (or until EOF) into block pointed to by p from file descriptor fd.

If a read error occurs, throws DatabaseError.

If min is specified and EOF is reached after less than min bytes, throws DatabaseCorruptError.

Returns the number of bytes actually read.

Definition at line 241 of file io_utils.cc.

References p.

Referenced by GlassChanges::check(), GlassDatabase::get_changeset_revisions(), GlassVersion::read(), HoneyVersion::read(), and test_if_single_file_db_().

◆ io_read_block()

void io_read_block ( int  fd,
char *  p,
size_t  n,
off_t  b,
off_t  o = 0 
)

Read block b size n bytes into buffer p from file descriptor fd, offset o.

Definition at line 432 of file io_utils.cc.

References p, rare, throw_block_error(), and usual.

Referenced by GlassTable::read_block(), and test_ioblock1().

◆ io_readahead_block()

bool io_readahead_block ( int  ,
size_t  ,
off_t  ,
off_t  = 0 
)
inline

Readahead block b size n bytes from file descriptor fd.

Returns false if we can't readahead on this fd.

Definition at line 190 of file io_utils.h.

Referenced by GlassTable::readahead_key(), and test_ioblock1().

◆ io_sync()

bool io_sync ( int  fd)
inline

Ensure all data previously written to file descriptor fd has been written to disk.

Returns false if this could not be done.

Definition at line 107 of file io_utils.h.

Referenced by GlassDatabaseReplicator::commit(), GlassChanges::commit(), io_full_sync(), GlassDatabaseReplicator::process_changeset_chunk_version(), GlassTable::sync(), BufferedFile::sync(), GlassVersion::sync(), HoneyVersion::sync(), and test_ioblock1().

◆ io_tmp_rename()

bool io_tmp_rename ( const std::string &  tmp_file,
const std::string &  real_file 
)

Rename a temporary file to its final position.

Attempts to deal with NFS infelicities. If the rename fails, the temporary file is removed.

Returns
true if the rename succeeded; false if it failed (and errno will be set appropriately).

Definition at line 573 of file io_utils.cc.

References posixy_rename.

Referenced by GlassChanges::commit(), Xapian::Database::compact_(), GlassDatabaseReplicator::process_changeset_chunk_version(), GlassVersion::sync(), HoneyVersion::sync(), and Xapian::DatabaseReplica::Internal::update_stub_database().

◆ io_unlink()

bool io_unlink ( const std::string &  filename)

Delete a file.

Parameters
filenameThe file to delete.
Exceptions
Xapian::DatabaseErroris thrown if filename existed but couldn't be unlinked.
Returns
true if filename was successfully removed; false if it didn't exist. If the file is on NFS, false may be returned even if the file was removed (if the server fails after removing the file but before telling the client, and the client then retries).

Definition at line 56 of file io_utils.cc.

References posixy_unlink.

Referenced by GlassChanges::commit(), GlassTable::create_and_open(), test_ioblock1(), and GlassChanges::~GlassChanges().

◆ io_write() [1/2]

void io_write ( int  fd,
const char *  p,
size_t  n 
)

◆ io_write() [2/2]

void io_write ( int  fd,
const unsigned char *  p,
size_t  n 
)
inline

Definition at line 156 of file io_utils.h.

References io_write(), and p.

◆ io_write_block() [1/2]

void io_write_block ( int  fd,
const char *  p,
size_t  n,
off_t  b,
off_t  o = 0 
)

Write block b size n bytes from buffer p to file descriptor fd, offset o.

Definition at line 507 of file io_utils.cc.

References p, rare, throw_block_error(), and usual.

Referenced by io_write_block(), GlassDatabaseReplicator::process_changeset_chunk_blocks(), test_ioblock1(), and GlassTable::write_block().

◆ io_write_block() [2/2]

void io_write_block ( int  fd,
const unsigned char *  p,
size_t  n,
off_t  b 
)
inline

Definition at line 199 of file io_utils.h.

References io_write_block(), and p.