c语言完成程序,父进程创建共享内存,子进程写入1.2.3.4.5.6.7.8.9.0.父进程读出并打印
时间: 2024-10-11 12:07:08 浏览: 26
threecodes.rar_C语言_pipes_threecodes_父进程 创建 子进程_生产者消费者
5星 · 资源好评率100%
在C语言中,可以使用`shmget`、`shmat`系统调用来创建和映射共享内存区域,然后通过`write`函数将数据写入,最后在父进程中使用`read`函数读取数据并通过`printf`打印。下面是一个简单的示例:
```c
#include <sys/shm.h>
#include <sys/ipc.h>
#include <stdio.h>
#include <unistd.h>
#define SHM_KEY 1234 // 共享内存标识符
#define SHM_SIZE (10 * sizeof(int)) // 分配的内存大小
int main() {
int shmid; // 存储共享内存标识
char *ptr; // 指向共享内存的指针
key_t key = ftok("/path/to/shared/memory", 'S'); // 使用文件路径和字符生成键值
// 父进程操作
if ((shmid = shmget(key, SHM_SIZE, IPC_CREAT | 0666)) == -1) {
perror("shmget failed");
exit(EXIT_FAILURE);
}
ptr = shmat(shmid, NULL, 0); // 获取共享内存地址
if (ptr == (char*)-1) {
perror("shmat failed");
exit(EXIT_FAILURE);
}
for (int i = 1; i <= 10; i++) {
printf("%d ", i); // 写入数值
write(shmid, &i, sizeof(int)); // 将数值写入共享内存
}
printf("\n");
// 父进程结束,手动调用shmdt释放共享内存
shmdt(ptr);
// 子进程操作
pid_t child_pid = fork();
if (child_pid == 0) { // 子进程
ptr = shmat(shmid, NULL, 0);
for (int i = 1; i <= 10; i++) {
int value;
read(shmid, &value, sizeof(int)); // 从共享内存读取数值
printf("%d\n", value); // 打印数值
}
_exit(EXIT_SUCCESS); // 子进程退出
} else {
wait(NULL); // 等待子进程结束
}
return 0;
}
```
阅读全文