Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Tomas Mazvila GRP loginas */
- /* Failas: tommaz2_aio02.c */
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <unistd.h>
- #include <string.h>
- #include <aio.h>
- #define BUFFLEN 1048576
- int kp_test_open(const char *name);
- int kp_test_close(int fd);
- int write_open(const char *name);
- int kp_test_open(const char *name){
- int dskr;
- dskr = open( name, O_RDONLY );
- if( dskr == -1 ){
- perror( name );
- exit(1);
- }
- printf( "dskr = %d\n", dskr );
- return dskr;
- }
- int write_open(const char *name){
- int dskr;
- dskr = open(name, O_WRONLY | O_CREAT, 644);
- if( dskr == -1){
- perror(name);
- exit(1);
- }
- printf("dskr = %d\n", dskr);
- return dskr;
- }
- int kp_test_close(int fd){
- int rv;
- rv = close( fd );
- if( rv != 0 ) perror ( "close() failed" );
- else puts( "closed" );
- return rv;
- }
- int do_stuff(const int d, const int d2, struct aiocb *aiorp, void *buf, const int count) {
- int rv = 0;
- const struct aiocb *aioptr[1];
- memset((void *)aiorp, 0, sizeof(struct aiocb));
- aiorp->aio_fildes = d;
- aiorp->aio_buf = buf;
- aiorp->aio_nbytes = count;
- aiorp->aio_offset = 0;
- aioptr[0] = aiorp;
- rv = aio_read(aiorp);
- if( rv != 0 ){
- perror( "aio_read failed" );
- abort();
- }
- int aio_ret_v = 0;
- int total = 0;
- aio_suspend(aioptr, 1, NULL);
- aio_ret_v = aio_return(aiorp);
- total += aio_ret_v;
- while( aio_ret_v == 0){
- aio_read(aiorp);
- aio_suspend(aioptr, 1, NULL);
- aio_ret_v = aio_return(aiorp);
- total += aio_ret_v;
- printf(".\n");
- }
- aiorp -> aio_fildes = d2;
- do {
- aio_write(aiorp);
- aio_suspend(aioptr, 1, NULL);
- aio_ret_v = aio_return(aiorp);
- } while(aio_ret_v == 0);
- printf( "AIO complete, %d bytes read.\n", total );
- return rv;
- }
- int main( int argc, char * argv[] ){
- int d, d2;
- struct aiocb aior;
- char buffer[BUFFLEN];
- d = kp_test_open( "/dev/urandom" );
- d2 = write_open("testwrite.txt");
- do_stuff(d, d2, &aior, buffer, sizeof(buffer));
- kp_test_close( d );
- printf( "(C) 2018 Tomas Mazvila, %s\n", __FILE__ );
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement