Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Failas: manbar3_rw01.c */
- #include <stdlib.h>
- #include <stdio.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <unistd.h>
- #include <sys/mman.h>
- int mb_open( const char *name, int flags, mode_t mode );
- void mb_close( int fd );
- void mb_close( int fd ){
- if ( close( fd ) != 0 )
- perror ( "close() failed" );
- }
- int mb_open( const char *name, int flags, mode_t mode ){
- int dskr;
- dskr = open( name, flags, mode );
- if( dskr == -1 ){
- perror( "open() failed" );
- exit(1);
- }
- return dskr;
- }
- int main( int argc, char * argv[] ){
- int r_dskr;
- char *end;
- char *data;
- struct stat sbuf;
- int offset;
- printf( "(C) 2016 Mantas Bartkus, %s\n", __FILE__ );
- if ( argc != 3 ){
- fprintf(stderr, "Usage: %s failas pozicija_faile\n", argv[0] );
- exit(1);
- }
- if ( stat(argv[1], &sbuf) == -1 ) {
- perror("stat failed");
- exit(1);
- }
- offset = (int) strtol( argv[2], &end, 10 );
- if ( *end ){
- perror( "Second parameter must be a number" );
- exit(1);
- }
- if ( offset < 0 || offset > sbuf.st_size-1 ) {
- fprintf( stderr, "offset must be in the range 0-%ld\n",
- sbuf.st_size-1 );
- exit(1);
- }
- r_dskr = mb_open( argv[1], O_RDONLY , 0 );
- data = mmap((caddr_t)0, sbuf.st_size, PROT_READ, MAP_SHARED, r_dskr, 0);
- if (data == (caddr_t)(-1)) {
- perror("mmap() failed");
- exit(1);
- }
- printf("byte at offset %d is '%d'\n", offset, (int) data[offset]);
- if ( munmap( data, sbuf.st_size ) != 0 ){
- perror( "munmap() failed" );
- exit(1);
- }
- mb_close( r_dskr );
- return 0;
- }
Add Comment
Please, Sign In to add comment