Add shared mem course example code.
[TD_SE.git] / mem / mem.c
diff --git a/mem/mem.c b/mem/mem.c
new file mode 100644 (file)
index 0000000..95e43f9
--- /dev/null
+++ b/mem/mem.c
@@ -0,0 +1,49 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <fcntl.h>
+
+#define nbchar 4096
+
+int main()
+{
+       int fd, res;
+       char *partage = NULL;
+       char *message = "";
+       fd = shm_open("partage.mem", O_RDWR | O_CREAT, 0600);   /* ouverture du segment partagé */
+       if (fd == -1) {                                             /* et création du nom (du fichier) */
+               perror("shm_open");
+               exit(1);
+       }
+       res = ftruncate(fd, nbchar);    /* choix de la taille du segment */
+       if (res == -1) {
+               perror("ftruncate");
+               exit(1);
+       }
+       partage = (char *)mmap(NULL, nbchar, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+       if (partage == MAP_FAILED) {
+               perror("mmap");
+               exit(1);
+       }
+       strncpy(partage, message, nbchar);
+       while (strcmp(partage, message) == 0) {
+               sleep(1);
+       }
+       fprintf(stdout, "la réponse est %s\n", partage);
+       res = munmap(partage, nbchar);
+       if (res == -1) {
+               perror("munmap");
+               exit(1);
+       }
+       close(fd);              /* fermeture du fichier */
+       res = shm_unlink("partage.mem");        /* suppression du nom */
+       if (res == -1) {
+               perror("shm_unlink");
+               exit(1);
+       }
+       return 0;
+}