#include #include #include #include #include #include #define MAP_SIZE 10 int main(int argc, char *argv[]) { if (argc < 2) { printf("*** Usage: filepath [new contents]\n"); return -1; } int fd = open(argv[1], O_RDWR); if (fd == -1) { printf("*** open() failed.\n"); return -2; } char *addr = mmap(NULL, MAP_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); if (addr == MAP_FAILED) { printf("*** mmap() failed.\n"); return -3; } if (close(fd) == -1) { // file descriptor no longer needed printf("*** close(fd) failed.\n"); return -4; } printf("Current contents = \"%.*s\"\n", MAP_SIZE, addr); if (argc > 2) { memset(addr, 0, MAP_SIZE); // zero out region strncpy(addr, argv[2], MAP_SIZE-1); if (msync(addr, MAP_SIZE, MS_SYNC) == -1) { // flush to disk printf("*** msync() failed.\n"); return -5; } printf("Copied \"%s\" to mapped file.\n", argv[2]); } return 0; }