主题:用管道实现两个进城间通信的问题。
用管道实现两个进程之间的通信。
思想是进程a向b发消息,由b来处理。
/*由此程序创建子进程调用要通信的两个进程。
main.c
*/
#include <stdio.h>
#include <unistd.h>
int main(){
int a_to_b[2];
pipe(a_to_b);
if(fork()==0){ /*第一个子进程*/
int fid=0;
close(a_to_b[0]);
close(1);
dup(a_to_b[1]); /*管道“写端”重定位到A进程的标准输出*/
execvp(proc_a.out , ...); /*A的代码覆盖原进程*/
}
if(fork()==0){ /*第二个子进程*/
int fid=0;
close(a_to_b[1]);
close(0);
dup(a_to_b[0]); /*管道“读端”重定位到B进程的标准输入*/
execvp(proc_b.out , ...);/*B的代码覆盖原进程*/
}
wait(); /*父进程,等待两个子进程返回。*/
wait();
return 0;
}
/*进程A, proc_a.c*/
#include<stdio.h>
int main(){
char ch='a';
int i=0;
for(;i<5;i++){
write(stdout,ch,sizeof(char)); /*发消息*/
ch++;
}
return 0;
}
/*进程B, proc_b.c*/
#include <stdio.h>
int main(){
char ch='o';
int i=0;
for(;i<5;i++){
read(stdin,ch,sizeof(char)); /*读消息*/
printf("%c\n");
}
return 0;
}
以上两个子进程,不知为何不能将消息写入管道。进程B每次都只打印'o'。
各位高手请帮忙指正问题。并对此程序提出您宝贵的意见。谢谢。
思想是进程a向b发消息,由b来处理。
/*由此程序创建子进程调用要通信的两个进程。
main.c
*/
#include <stdio.h>
#include <unistd.h>
int main(){
int a_to_b[2];
pipe(a_to_b);
if(fork()==0){ /*第一个子进程*/
int fid=0;
close(a_to_b[0]);
close(1);
dup(a_to_b[1]); /*管道“写端”重定位到A进程的标准输出*/
execvp(proc_a.out , ...); /*A的代码覆盖原进程*/
}
if(fork()==0){ /*第二个子进程*/
int fid=0;
close(a_to_b[1]);
close(0);
dup(a_to_b[0]); /*管道“读端”重定位到B进程的标准输入*/
execvp(proc_b.out , ...);/*B的代码覆盖原进程*/
}
wait(); /*父进程,等待两个子进程返回。*/
wait();
return 0;
}
/*进程A, proc_a.c*/
#include<stdio.h>
int main(){
char ch='a';
int i=0;
for(;i<5;i++){
write(stdout,ch,sizeof(char)); /*发消息*/
ch++;
}
return 0;
}
/*进程B, proc_b.c*/
#include <stdio.h>
int main(){
char ch='o';
int i=0;
for(;i<5;i++){
read(stdin,ch,sizeof(char)); /*读消息*/
printf("%c\n");
}
return 0;
}
以上两个子进程,不知为何不能将消息写入管道。进程B每次都只打印'o'。
各位高手请帮忙指正问题。并对此程序提出您宝贵的意见。谢谢。