使用mmap完成父子进程间通信,完整代码
时间: 2023-08-11 12:31:08 浏览: 52
下面是一个使用mmap完成父子进程间通信的完整代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/mman.h>
#define SHARED_MEM_SIZE 4096
int main() {
pid_t pid;
char* shared_memory;
// 映射共享内存区域
shared_memory = mmap(NULL, SHARED_MEM_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
if (shared_memory == MAP_FAILED) {
perror("mmap failed");
exit(EXIT_FAILURE);
}
// 创建子进程
pid = fork();
if (pid == -1) {
perror("fork failed");
exit(EXIT_FAILURE);
}
if (pid == 0) { // 子进程
printf("Message from parent: %s\n", shared_memory);
sprintf(shared_memory, "Hello, parent!");
} else { // 父进程
strcpy(shared_memory, "Hello, child!");
sleep(1);
printf("Message from child: %s\n", shared_memory);
}
// 解除映射
if (munmap(shared_memory, SHARED_MEM_SIZE) == -1) {
perror("munmap failed");
exit(EXIT_FAILURE);
}
return 0;
}
```
代码中,先使用mmap函数映射了一块共享内存区域。然后创建了一个子进程,子进程可以从共享内存区域中读取到父进程写入的数据,并向父进程写入一条消息。父进程向共享内存区域中写入了一条消息,并在1秒后读取子进程写入的消息。最后解除了共享内存区域的映射。