1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4 #include <sys/mman.h>
5 #include <sys/shm.h>
6 #include <sys/ipc.h>
7 #include <string.h>
8 #include <sys/wait.h>
9
10 #define SHM_SIZE 9999
11
main()12 int main()
13 {
14 int shmid;
15 char *shmaddr;
16 key_t key = 6666;
17
18 // 测试shmget
19 shmid = shmget(key, SHM_SIZE, 0666 | IPC_CREAT);
20 if (shmid < 0)
21 {
22 perror("shmget failed");
23 exit(EXIT_FAILURE);
24 }
25
26 // 测试shmat
27 shmaddr = shmat(shmid, 0, 0);
28
29 memset(shmaddr, 0, SHM_SIZE);
30 memcpy(shmaddr, "Sender Hello!", 14);
31
32 int pid = fork();
33 if (pid == 0)
34 {
35 execl("/bin/test_shm_receiver", NULL, NULL);
36 }
37
38 waitpid(pid, NULL, 0);
39
40 char read_buf[20];
41 memcpy(read_buf, shmaddr, 16);
42 printf("Sender receive: %s\n", read_buf);
43
44 shmdt(shmaddr);
45 shmctl(shmid, IPC_RMID, NULL);
46 }
47