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 |
Important
We highly recommend using the pwrite
and pread
wrappers rather than the write
and read
wrappers,
especially if you either post I/O operations from multiple ES,
or setup ABT-IO to execute I/O operations in multiple ES.
abt_io_read
and abt_io_write
rely on the file
descriptor’s internal cursor, and Argobots cannot guarantee
the order of I/O operations posted, which may lead to
unpredictable reordering.