summaryrefslogtreecommitdiff
path: root/reference/C/CONTRIB/OR_USING_C/11.5.c
diff options
context:
space:
mode:
Diffstat (limited to 'reference/C/CONTRIB/OR_USING_C/11.5.c')
-rw-r--r--reference/C/CONTRIB/OR_USING_C/11.5.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/reference/C/CONTRIB/OR_USING_C/11.5.c b/reference/C/CONTRIB/OR_USING_C/11.5.c
new file mode 100644
index 0000000..50038de
--- /dev/null
+++ b/reference/C/CONTRIB/OR_USING_C/11.5.c
@@ -0,0 +1,59 @@
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#include <stdio.h>
+
+#define SHMSZ 27
+
+main()
+{
+ char c;
+ int shmid;
+ key_t key;
+ char *shmat();
+ char *shm, *s;
+
+ /*
+ * We'll name our shared memory segment
+ * "5678".
+ */
+ key = 5678;
+
+ /*
+ * Create the segment.
+ */
+ if ((shmid = shmget(key, SHMSZ, IPC_CREAT | 0666)) < 0) {
+ perror("shmget");
+ exit(1);
+ }
+
+ /*
+ * Now we attach the segment to our data space.
+ */
+ if ((shm = shmat(shmid, NULL, 0)) == (char *) -1) {
+ perror("shmat");
+ exit(1);
+ }
+
+ /*
+ * Now put some things into the memory for the
+ * other process to read.
+ */
+ s = shm;
+
+ for (c = 'a'; c <= 'z'; c++)
+ *s++ = c;
+ *s = NULL;
+
+ /*
+ * Finally, we wait until the other process
+ * changes the first character of our memory
+ * to '*', indicating that it has read what
+ * we put there.
+ */
+ while (*shm != '*')
+ sleep(1);
+
+ exit(0);
+}
+