请在Linux利用c编写程序,使用共享内存在进程A和进程B之间发送数据,进程A向进程B发送hello,进程B收到进程A的数据hello后发送world给进程A...
时间: 2024-03-06 12:51:18 浏览: 21
好的,下面是一个简单的示例程序,使用共享内存在进程A和进程B之间发送数据:
进程A:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <string.h>
#define SHM_SIZE 1024
int main()
{
int shmid;
char *shmaddr;
key_t key = 1234;
// 创建共享内存
shmid = shmget(key, SHM_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);
}
// 向共享内存中写入数据
strcpy(shmaddr, "hello");
// 等待进程B读取数据
while(*shmaddr != '*') {
sleep(1);
}
// 打印接收到的数据
printf("received: %s\n", shmaddr);
// 解除共享内存的映射
shmdt(shmaddr);
// 删除共享内存
shmctl(shmid, IPC_RMID, NULL);
return 0;
}
```
进程B:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <string.h>
#define SHM_SIZE 1024
int main()
{
int shmid;
char *shmaddr;
key_t key = 1234;
// 获取共享内存
shmid = shmget(key, SHM_SIZE, 0666);
if(shmid < 0) {
perror("shmget error");
exit(-1);
}
// 将共享内存映射到进程地址空间
shmaddr = shmat(shmid, NULL, 0);
if(shmaddr == (char *)-1) {
perror("shmat error");
exit(-1);
}
// 等待进程A写入数据
while(*shmaddr != 'h') {
sleep(1);
}
// 打印接收到的数据
printf("received: %s\n", shmaddr);
// 向共享内存中写入数据
strcpy(shmaddr, "world");
// 标记共享内存中数据已经被读取
*shmaddr = '*';
// 解除共享内存的映射
shmdt(shmaddr);
return 0;
}
```
这个程序的实现方式是进程A向共享内存中写入数据"hello",然后等待进程B读取数据。进程B读取到数据后,向共享内存中写入数据"world",然后标记共享内存中数据已经被读取。最后进程A读取到数据"world"并打印出来。