#include
1<stdio.h>
2#include <unistd.h>
3#include <sys types.h="">
4#define MAXLINE 20
5int main()
6{
7int n1,n2,fd[2];
8pid_t pid;
9char line[MAXLINE];
10char line2[MAXLINE];
11if(pipe(fd)<0)
12printf("pipe error");
13if((pid=fork())<0)
14printf("fork error");
15else if(pid>0){ //parent
16write(fd[1],"how are you?\n",MAXLINE);
17
18wait();
19n1=read(fd[0],line2,MAXLINE);
20write(STDOUT_FILENO,line2,n1);
21}else{
22//close(fd[1]);
23n2=read(fd[0],line,MAXLINE);
24write(STDOUT_FILENO,line2,n2);
25
26write(fd[1],"fine,thanks\n",MAXLINE);
27
28}
29exit(0);
30}
31输出怎么会这样?
32?慷褸4k@怈fine,thanks
33\---------------------------------------------------------------
34
35正确答案:
361、pipe是单工机制的,对于你写的pipe你只能从父进程写,从子进程读。
372、write(STDOUT_FILENO,line2,n2);要改为write(STDOUT_FILENO,line,n2);
383、write时不要用MAXLINE,这样将会往PIPE中写入一些无用的数据(乱码)。这个参数要用实际的值。
394、要实现父子进程间的通讯,你可以用两个PIPE。</sys></unistd.h></stdio.h>