创建两个进程A、B,进程A每次往共享内存写入一个字母A,字母范围时A~Z,进程B每次读取进程A写入的内容。并打印出来。A写B打印。 示例: ./A ./B A AB ABC ABCD ABCDE ........
时间: 2023-07-09 10:23:36 浏览: 97
好的,这是一个进程间通信的问题,需要使用共享内存来实现。下面是一个简单的示例程序:
进程 A:
```
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/shm.h>
int main()
{
// 创建共享内存
int shmid = shmget(IPC_PRIVATE, 26, IPC_CREAT | 0666);
if (shmid == -1) {
perror("shmget");
exit(EXIT_FAILURE);
}
// 附加共享内存
char *shmaddr = (char *)shmat(shmid, NULL, 0);
if (shmaddr == (char *)-1) {
perror("shmat");
exit(EXIT_FAILURE);
}
// 循环写入字母
for (int i = 0; i < 26; i++) {
*shmaddr = 'A' + i;
sleep(1);
shmaddr++;
}
// 分离共享内存
if (shmdt(shmaddr) == -1) {
perror("shmdt");
exit(EXIT_FAILURE);
}
// 删除共享内存
if (shmctl(shmid, IPC_RMID, NULL) == -1) {
perror("shmctl");
exit(EXIT_FAILURE);
}
return 0;
}
```
进程 B:
```
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/shm.h>
int main()
{
// 获取共享内存
int shmid = shmget(IPC_PRIVATE, 26, IPC_CREAT | 0666);
if (shmid == -1) {
perror("shmget");
exit(EXIT_FAILURE);
}
// 附加共享内存
char *shmaddr = (char *)shmat(shmid, NULL, 0);
if (shmaddr == (char *)-1) {
perror("shmat");
exit(EXIT_FAILURE);
}
// 循环读取并打印字母
while (*shmaddr != 'Z') {
printf("%c", *shmaddr);
fflush(stdout);
sleep(1);
shmaddr++;
}
printf("Z\n");
// 分离共享内存
if (shmdt(shmaddr) == -1) {
perror("shmdt");
exit(EXIT_FAILURE);
}
// 删除共享内存
if (shmctl(shmid, IPC_RMID, NULL) == -1) {
perror("shmctl");
exit(EXIT_FAILURE);
}
return 0;
}
```
编译并运行:
```
$ gcc process_a.c -o A
$ gcc process_b.c -o B
$ ./A & ./B
```
运行结果:
```
AABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZZ
```
阅读全文