2.进程间的管道通信
程序员文章站
2022-05-21 22:46:45
...
(一) 编写一个关于进程通信的简单程序,子进程送一串消息给父进程,父进程收到消息后把它显示出来。 要求: 两个子进程分别向管道写一句话: Child process 1 is sending a message! Child process 2 is sending a message! 而父进程则从管道中读出来自两
(一) 编写一个关于进程通信的简单程序,子进程送一串消息给父进程,父进程收到消息后把它显示出来。
要求:
两个子进程分别向管道写一句话:
Child process 1 is sending a message!
Child process 2 is sending a message!
而父进程则从管道中读出来自两个子进程的消息,显示屏幕上,且父进程要先接收子进程1的消息,在接受子进程2的消息。
#include#include #include #define SIZE 50 int main() { int p1, p2; int fd[2]; char str[50]; while((pipe(fd)) == -1); while((p1 = fork()) == -1); if(p1) { while((p2 = fork()) == -1); if(p2) { //parent wait(0); read(fd[0], str, SIZE); printf("%s\n", str); wait(0); read(fd[0], str, SIZE); printf("%s\n", str); } else { //child2 lockf(fd[1], 1, 0); sleep(2); strcpy(str, "Child process 2 is sending messages!\n"); write(fd[1], str, SIZE); lockf(fd[1], 0, 0); } } else { //child1 lockf(fd[1], 1, 0); sleep(2); strcpy(str, "Child process 1 is sending messages!\n"); write(fd[1], str, SIZE); //sleep(2); lockf(fd[1], 0, 0); } }
(二)父进程等待用户从控制台(键盘)输入字符串,通过管道传给子进程;子进程收到后,对字符串进行大小写转换后,输出到标准输出(显示器)。
#include#include #include #define SIZE 50 int main() { int p, fd[2]; int i = 0; char str[SIZE]; while((pipe(fd)) == -1); while((p = fork()) == -1); if(p) { //parent lockf(fd[1], 1, 0); printf("Please input the string:"); scanf("%s", str); write(fd[1], str, SIZE); lockf(fd[1], 0, 0); wait(0); read(fd[0], str, SIZE); printf("reversed string is : %s\n", str); } else { read(fd[0], str, SIZE); while(str[i] != '\0') { if('A'