- Get link
- X
- Other Apps
Featured Post
Posted by
Unknown
on
- Get link
- X
- Other Apps
Using memory mapped file two processes can both open the same file and both read and write from it, thus sharing the information.It is easier to map a section of the file to memory, and get a pointer to it rather than doing fseek .
A memory mapped file is very easy to use as we can perform simple arithmetic operations to get and set data from a file.
Here is a simple example of creating and using memory mapped files.It takes a file and offset as input and tells what data is present at that offset.
A memory mapped file is very easy to use as we can perform simple arithmetic operations to get and set data from a file.
Here is a simple example of creating and using memory mapped files.It takes a file and offset as input and tells what data is present at that offset.
//memorymap.c //To compile : gcc -o mmap memorymap.c //To run : ./mmap file-name offset #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <sys/types.h> #include <sys/mman.h> #include <sys/stat.h> #include <errno.h> int main(int argc, char *argv[]) { int fd, offset; char *data; struct stat sbuf; if (argc != 3) { fprintf(stderr, "usage: %s <file-name> offset\n",argv[0]); exit(1); } if ((fd = open(argv[1], O_RDONLY)) == -1) { perror("open"); exit(1); } /*argv[1] is the file name to be examined*/ if (stat(argv[1], &sbuf) == -1) { perror("stat"); exit(1); } offset = atoi(argv[2]); if (offset < 0 || offset > sbuf.st_size-1) { printf("%s: offset must be in the range 0-%d\n",argv[0],sbuf.st_size-1); exit(1); } data = mmap((caddr_t)0, sbuf.st_size, PROT_READ, MAP_SHARED, fd, 0); { if (data == (caddr_t)(-1)) { perror("mmap"); exit(1); } printf("Byte at offset %d is '%c'\n", offset, data[offset]); return 0; } }
Comments
This also works very efficiently in Java.
ReplyDelete