分类: C/C++
2013-12-16 11:30:16
管道的创建
int pipe(int filedes[2]);经由参数filedes返回两个文件描述符:filedes[0]为读而打开,filedes[1]为写而打开。
从父进程到子进程之间的通信
#include"ourhdr.h"
int main(void)
{
int n,fd[2]; 关于fd的值,由于0,1,2已经由内核的shell分配,所以fd[0]至少为3,fd[1]=4;详细内容可看文件共享
pid_t pid;
char line[20];
if(pipe(fd)<0)
printf("pipe error");
if((pid=fork())<0){
perror("fork error");
exit(1);
}
else if(pid>0){
// sleep(5);
/*睡眠5秒,等待子进程先运行。
查看输出,结果子进程仍然输出了父进程写入的数据*/
/*
close(fd[0]);
write(fd[1],"hello world\0\n",13);
*/
/*子进程写入,父进程读取通过管道*/
/*疑问?为何父进程无论是写入还是读取,
* 都能够输出正常呢?*/
/*read只有正常读取到值才会返回,所以这里不牵扯到系统是先调用父进程还是子进程*/
close(fd[1]);
printf("start read\n");
n=read(fd[0],line,20);
printf("n[%d]end read\n",n);
write(STDOUT_FILENO,line,n);
}
else{
/*
close(fd[1]);
n=read(fd[0],line,20);
printf("n[%d],%s\n",n,line);// line输出有异常
write(STDOUT_FILENO,line,n);
*/
close(fd[0]);
printf("start write\n");
sleep(3);
//write(fd[1],"hello word\0\n",13);
write(fd[1]," ",1);//写入空值进行测试
printf("end write\n");
}
exit(0);
}