From 1d4fcf24724b0201414c8e74d9d2f4d51906e8b6 Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Sat, 28 Jun 2025 11:01:29 +0200 Subject: [PATCH] Added example memory management usage chapter 4 --- chp4/mmap.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 chp4/mmap.c diff --git a/chp4/mmap.c b/chp4/mmap.c new file mode 100644 index 0000000..11c9843 --- /dev/null +++ b/chp4/mmap.c @@ -0,0 +1,53 @@ +#include +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) { + + if (argc < 2) { + fprintf(stderr, "usage: %s \n", argv[0]); + return 1; + } + + int fd = open(argv[1], O_RDONLY); + if (fd == -1) { + perror("open"); + return 1; + } + + struct stat sb; + if (fstat(fd, &sb) == -1) { + perror("fstat"); + return 1; + } + + if (!S_ISREG(sb.st_mode)) { + fprintf(stderr, "%s is not a file\n", argv[1]); + return 1; + } + + char *p = (char *)mmap(0, sb.st_size, PROT_READ, MAP_SHARED, fd, 0); + if (p == MAP_FAILED) { + perror("mmap"); + return 1; + } + + if (close(fd) == -1) { + perror("close"); + return 1; + } + + for (int len = 0; len < sb.st_size; len++) { + putchar(p[len]); + } + + if (munmap(p, sb.st_size) == -1) { + perror("munmap"); + return 1; + } + + return 0; +}