linux 有P1,P2,P3三个进程,P1和P2负责从键盘接收字符串,均发送给P3,P3接收到字符串,根据发送方分别显示”P3 received *** from P1(或P2)" ;分别用管道通信,消息队列和共享存储三种通信方式实现。
时间: 2023-12-25 14:05:09 浏览: 137
以下是使用管道通信的实现方式:
P1和P2进程负责从键盘接收字符串,并将字符串发送给P3进程,P3进程接收到字符串后根据发送方显示“P3 received *** from P1(或P2)”。
首先,我们需要创建两个管道,一个用于P1向P3发送消息,另一个用于P2向P3发送消息。在P1和P2进程中,我们需要使用管道的写端,而在P3进程中,我们需要使用管道的读端。
以下是P1进程的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define MSG_SIZE 128
int main() {
int fd;
char msg[MSG_SIZE];
// 创建管道
if (mkfifo("p1_to_p3", 0666) == -1) {
perror("mkfifo");
exit(1);
}
// 打开写端
if ((fd = open("p1_to_p3", O_WRONLY)) == -1) {
perror("open");
exit(1);
}
// 从键盘读取字符串,发送到P3进程
while (1) {
printf("P1: ");
fgets(msg, MSG_SIZE, stdin);
write(fd, msg, strlen(msg)+1);
}
close(fd);
return 0;
}
```
以下是P2进程的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define MSG_SIZE 128
int main() {
int fd;
char msg[MSG_SIZE];
// 创建管道
if (mkfifo("p2_to_p3", 0666) == -1) {
perror("mkfifo");
exit(1);
}
// 打开写端
if ((fd = open("p2_to_p3", O_WRONLY)) == -1) {
perror("open");
exit(1);
}
// 从键盘读取字符串,发送到P3进程
while (1) {
printf("P2: ");
fgets(msg, MSG_SIZE, stdin);
write(fd, msg, strlen(msg)+1);
}
close(fd);
return 0;
}
```
以下是P3进程的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define MSG_SIZE 128
int main() {
int fd1, fd2;
char msg[MSG_SIZE];
// 打开读端
if ((fd1 = open("p1_to_p3", O_RDONLY)) == -1) {
perror("open p1_to_p3");
exit(1);
}
// 打开读端
if ((fd2 = open("p2_to_p3", O_RDONLY)) == -1) {
perror("open p2_to_p3");
exit(1);
}
while (1) {
// 从P1读取消息
if (read(fd1, msg, MSG_SIZE) > 0) {
printf("P3 received %s from P1\n", msg);
}
// 从P2读取消息
if (read(fd2, msg, MSG_SIZE) > 0) {
printf("P3 received %s from P2\n", msg);
}
}
close(fd1);
close(fd2);
return 0;
}
```
以上是使用管道通信的实现方式。接下来可以类似地实现消息队列和共享存储的通信方式。
阅读全文