#include #include #include #include #include #include #include int main (int argc, char* argv []) { char buffer [BUFSIZ]; char* pMap; int fd = open ("MAPPED.FILE", O_CREAT | O_RDWR | O_SYNC, 0666); if (fd == -1) { perror ("open"); return -1; } write (fd, "\0", 1); if (lseek (fd, BUFSIZ - 1, SEEK_SET) != BUFSIZ - 1) { perror ("lseek"); return -1; } write (fd, "\0", 1); pMap = (char*) mmap (NULL, BUFSIZ, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if ((size_t) pMap == -1) { perror ("mmap"); return -1; } while (1) { fprintf (stderr, " OR $ "); fgets (buffer, sizeof (buffer) - 1, stdin); #if 0 if (munmap (pMap, BUFSIZ)) { perror ("munmap"); return -1; } pMap = (char*) mmap (NULL, BUFSIZ, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if ((size_t) pMap == -1) { perror ("mmap"); return -1; } #endif if (buffer [0] == '\n') { fprintf (stderr, "Mapped file contents: %s\n", pMap); } else { strncpy (pMap, buffer, strlen (buffer) - 1); fprintf (stderr, "Written to mapped file: %s\n", pMap); } if (msync (pMap, BUFSIZ, MS_SYNC | MS_INVALIDATE)) { perror ("msync"); return -1; } } return 0; }