Advertisement
Guest User

Untitled

a guest
May 20th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.78 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/types.h>
  4. #include <sys/stat.h>
  5. #include <fcntl.h>
  6. #include <unistd.h>
  7. #include <string.h>
  8. #include <aio.h>
  9.  
  10. #define BUFFLEN 1024*1024
  11.  
  12. int rm_open(const char *name){
  13. int dskr = open( name, O_RDONLY );
  14. if( dskr == -1 ){
  15. perror( name );
  16. exit(1);
  17. }
  18. printf( "dskr = %d\n", dskr );
  19. return dskr;
  20. }
  21.  
  22. void rm_close(int fd){
  23. int rv = close( fd );
  24. if( rv != 0 ) perror ( "close() failed" );
  25. else puts( "closed" );
  26. }
  27.  
  28. int rm_aio_read_start( const int d, struct aiocb *aiorp, void *buf, int count, int offset){
  29. memset( (void *)aiorp, 0, sizeof( struct aiocb ) );
  30. aiorp->aio_fildes = d;
  31. aiorp->aio_buf = buf;
  32. aiorp->aio_nbytes = count;
  33. aiorp->aio_offset = offset;
  34. printf("%d\n", aiorp->aio_offset);
  35. int rv = 0;
  36. rv = aio_read( aiorp );
  37. if( rv != 0 ){
  38. perror( "aio_read failed" );
  39. abort();
  40. }
  41. return rv;
  42. }
  43.  
  44. void rm_dummy( const void *data, int n ){
  45. int i, cnt = 0;
  46. for( i = 0; i < n; i++ )
  47. if( ((char*)data)[i] == '\0' ) cnt++;
  48. printf( "Number of '0' in data: %d\n", cnt );
  49. }
  50.  
  51. void rm_aio_read_waitcomplete( struct aiocb *aiorp ){
  52. const struct aiocb *aioptr[1];
  53. aioptr[0] = aiorp;
  54. int rv = aio_suspend( aioptr, 1, NULL );
  55. if( rv != 0 ){
  56. perror( "aio_suspend failed" );
  57. abort();
  58. }
  59. rv = aio_return( aiorp );
  60. printf( "AIO complete, %d bytes read.\n", rv );
  61. }
  62.  
  63. int main(){
  64. int offset = 0;
  65. struct aiocb aior;
  66. char buffer[BUFFLEN];
  67. int d = rm_open( "/dev/urandom" );
  68. int i = 0;
  69. while(i < 10){
  70. rm_aio_read_start( d, &aior, buffer, sizeof(buffer), offset );
  71. offset += sizeof( struct aiocb);
  72. rm_dummy( buffer, sizeof(buffer) );
  73. rm_aio_read_waitcomplete( &aior );
  74. i++;
  75. }
  76. rm_close( d );
  77. rm_dummy( buffer, sizeof(buffer) );
  78. return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement