自己就仿佛在黑暗的管道中行走,只有开始与结果,没有过程
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int pid1,pid2;
int main()
{
int fd[2];
char outpipe[100],inpipe[100];//定义管道的入端与出端的缓冲空间
pipe(fd);
while((pid1=fork())==-1);//如果创建不成功继续创建
/*if(0 < pid)///创建不成功,打印错误并退出
{
perror("fork");
exit(-1);
}*/
if(pid1==0)
{
lockf(fd[1],1,0);//文件描述符,互斥锁定区域,锁定当前偏移量到文件尾的区域
sprintf(outpipe,"child 1 process is sending message \n");//写一串字符到outpipe中
write(fd[1],outpipe,50);//将outpipe中的字符写50到fd[1]中
sleep(5);
lockf(fd[1],0,0);//解锁
}
else
{
while((pid2=fork())==-1);//如果创建不成功继续创建
/*if(0 < pid)//创建不成功,打印错误并退出
{
perror("fork");
exit(-1);
}*/
if(pid2==0)//子进程2,与子进程1类似
{
lockf(fd[1],1,0);
sprintf(outpipe,"child 2 process is sending message\n");
write(fd[1],outpipe,50);
sleep(5);
lockf(fd[1],0,0);
exit(-1);
}
else
{
wait(NULL);等待子进程结束
read(fd[0],inpipe,50);//将管道f[0]中的值读50字节的串到inpipie中
printf("%s\n",inpipe);//输出inpipe中的字符
wait(NULL);
read(fd[0],inpipe,50);
printf("%s\n",inpipe);
exit(0);
}
}
}