int main(void)
{
pid_t pid;
int fd[2];
char buf[100];
//创建无名管道
if(pipe(fd) < 0){
perror("pipe");
exit(1);
}
//创建子进程
if((pid = fork()) < 0){
perror("fork");
exit(1);
}else if(!pid){ //子进程向管道中写字符串
while(1){
bzero(buf,sizeof(buf));
printf("请输入一个字符串:");
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1] = '\0';
if(write(fd[1],buf,strlen(buf)) < 0){
perror("write");
exit(1);
}
if(!strncmp(buf,"quit",4))
break;
}
exit(0);
}else{ //父进程从管道读数据,并打印到屏幕
while(1){
bzero(buf,sizeof(buf));
if(read(fd[0],buf,sizeof(buf)) < 0){
perror("read");
exit(1);
}
if(!strncmp(buf,"quit",4))
break;
printf("parent:%s\n",buf);
}
exit(0);
}
return 0;
}
int main(void)
{
pid_t pid;
int fd[2];
if(pipe(fd)<0){
perror("pipe");
exit(1);
}
if((pid = fork())<0){
perror("fork");
exit(1);
}else if(!pid){
close(fd[0]);
dup2(fd[1],STDOUT_FILENO);
execlp("ls","ls","-l",NULL);
exit(0);
}else{
close(fd[1]);
dup2(fd[0],STDIN_FILENO);
execlp("grep","grep","ls_w.c",NULL);
exit(0);
}
return 0;
}
第一个为什么不用关闭文件描述符?
第二个的dup2(fd[1],STDOUT_FILENO),写是输出,为什么不是输入