编写一段C语言程序使其完成:两段程序 test1和test2通过一个共享内存进行通信,其中test1 向共享内存中写数据,test2从共享内存中读出数据或信息并将数据或信息送入标准输出上
时间: 2024-06-10 19:04:39 浏览: 50
好的,让我来帮您写一个基于共享内存通信的 C 语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#define SIZE 1024
int main() {
int shmid;
char *shmaddr;
char data[SIZE];
// 获取共享内存的 ID
shmid = shmget(IPC_PRIVATE, SIZE, IPC_CREAT | 0666);
if (shmid < 0) {
perror("shmget error");
exit(1);
}
// 把共享内存连接到当前进程的地址空间
shmaddr = shmat(shmid, NULL, 0);
if (shmaddr == (char *)-1) {
perror("shmat error");
exit(1);
}
// test1: 向共享内存中写数据
sprintf(data, "Hello, this is test1 writing data to shared memory!\n");
sprintf(shmaddr, "%s", data);
// test2: 从共享内存中读出数据并输出到标准输出上
printf("test2: %s", shmaddr);
// 删除共享内存
if (shmdt(shmaddr) < 0) {
perror("shmdt error");
exit(1);
}
if (shmctl(shmid, IPC_RMID, NULL) < 0) {
perror("shmctl error");
exit(1);
}
return 0;
}
```
其中,test1 和 test2 分别需要运行两次该程序。在第一次运行时,test1 会向共享内存中写入数据,而 test2 则会从共享内存中读出数据并输出到标准输出上。在第二次运行时,test2 会向共享内存中写入数据,而 test1 则会从共享内存中读出数据并输出到标准输出上。
注意:为了保证程序运行的正确性,请在运行前先编译该 C 语言程序。
阅读全文