#include #include #include #include #include #include #define FILE_PATH "mapped.txt" #define FILE_SIZE 4096 int main() { int fd = open(FILE_PATH, O_RDWR | O_CREAT, 0644); if (fd == -1) { perror("open"); return 1; } /* We want some space to write */ if (ftruncate(fd, FILE_SIZE) == -1) { perror("ftruncate"); close(fd); return 1; } /* NULL means we do not care where the mapping goes, anywhere in canonical memory will do * PROT_READ/WRITE are just protection flags that allows our process rw rights * MAP_SHARED means our (real time, or close to) changes are visible to other processes mmping the same file */ void *file_memory = mmap(NULL, FILE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (file_memory == MAP_FAILED) { perror("mmap"); close(fd); return 1; } const char *message = "This is written to file!"; strncpy(file_memory, message, strlen(message) + 1); /* Re-truncate the file to known length, otherwise the entire buffer * (4k, with garbage from whatever the kernel gave us) will be in the file*/ if (ftruncate(fd, strnlen(message, FILE_SIZE + 1)) == -1) { perror("ftruncate"); close(fd); return 1; } printf("Mapped region content: %s\n", (char *)file_memory); munmap(file_memory, FILE_SIZE); close(fd); /* Optional finishing step, but i assume you want to inspect the file */ // remove(file_path); return 0; }