se7enuts

3xxx3

May 31st, 2016
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1.  
  2. /* Failas: manbar3_rw01.c */
  3.  
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. #include <sys/types.h>
  7. #include <sys/stat.h>
  8. #include <fcntl.h>
  9. #include <unistd.h>
  10. #include <sys/mman.h>
  11.  
  12. int mb_open( const char *name, int flags, mode_t mode );
  13. void mb_close( int fd );
  14.  
  15. void mb_close( int fd ){
  16. if ( close( fd ) != 0 )
  17. perror ( "close() failed" );
  18. }
  19.  
  20. int mb_open( const char *name, int flags, mode_t mode ){
  21. int dskr;
  22. dskr = open( name, flags, mode );
  23. if( dskr == -1 ){
  24. perror( "open() failed" );
  25. exit(1);
  26. }
  27. return dskr;
  28. }
  29.  
  30. int main( int argc, char * argv[] ){
  31. int r_dskr;
  32. char *end;
  33. char *data;
  34. struct stat sbuf;
  35. int offset;
  36. printf( "(C) 2016 Mantas Bartkus, %s\n", __FILE__ );
  37.  
  38. if ( argc != 3 ){
  39. fprintf(stderr, "Usage: %s failas pozicija_faile\n", argv[0] );
  40. exit(1);
  41. }
  42.  
  43. if ( stat(argv[1], &sbuf) == -1 ) {
  44. perror("stat failed");
  45. exit(1);
  46. }
  47.  
  48. offset = (int) strtol( argv[2], &end, 10 );
  49.  
  50. if ( *end ){
  51. perror( "Second parameter must be a number" );
  52. exit(1);
  53. }
  54.  
  55. if ( offset < 0 || offset > sbuf.st_size-1 ) {
  56. fprintf( stderr, "offset must be in the range 0-%ld\n",
  57. sbuf.st_size-1 );
  58. exit(1);
  59. }
  60.  
  61.  
  62. r_dskr = mb_open( argv[1], O_RDONLY , 0 );
  63.  
  64. data = mmap((caddr_t)0, sbuf.st_size, PROT_READ, MAP_SHARED, r_dskr, 0);
  65.  
  66. if (data == (caddr_t)(-1)) {
  67. perror("mmap() failed");
  68. exit(1);
  69. }
  70.  
  71. printf("byte at offset %d is '%d'\n", offset, (int) data[offset]);
  72.  
  73. if ( munmap( data, sbuf.st_size ) != 0 ){
  74. perror( "munmap() failed" );
  75. exit(1);
  76. }
  77.  
  78. mb_close( r_dskr );
  79. return 0;
  80. }
Add Comment
Please, Sign In to add comment