Issuing I/O operations
Once initialized, ABT-IO can be used to issue I/O operations as follows.
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <abt-io.h>
int main(int argc, char** argv)
{
// Argobots must be initialized, either with ABT_init
// or with margo_init, thallium::engine, or thallium::abt.
ABT_init(argc, argv);
// abt_io_init takes the number of ES to create as a parameter.
abt_io_instance_id abtio = abt_io_init(2);
// open a file
int fd = abt_io_open(abtio, "test.txt", O_WRONLY | O_APPEND | O_CREAT, 0600);
// write to the file
abt_io_pwrite(abtio, fd, "This is a test", 14, 0);
// close the file
abt_io_close(abtio, fd);
// ABT-IO must be finalized before Argobots it finalized.
abt_io_finalize(abtio);
ABT_finalize();
return 0;
}
The list of available I/O operations is the following.
ABT-IO function |
Corresponding POSIX function |
|---|---|
abt_io_open |
open |
abt_io_write |
write |
abt_io_pwrite |
pwrite |
abt_io_read |
read |
abt_io_pread |
pread |
abt_io_mkostemp |
mkostemp |
abt_io_unlink |
unlink |
abt_io_close |
close |
abt_io_ftruncate |
ftruncate |
abt_io_truncate |
truncate |
abt_io_lseek |
lseek |
abt_io_fdatasync |
fdatasync |
abt_io_fallocate |
fallocate |
abt_io_stat |
stat |
abt_io_statfs |
statfs |
Important
We highly recommend using the pwrite and pread wrappers
rather than the write, read, and lseek wrappers.
The former functions include explicit offsets with each operation, while
the latter rely on implicit file positioning which will be unreliable and
unpredictable if current I/O operations are in flight. ABT-IO inherently
does not serialize or otherwise enforce ordering among concurrent
operations.