这个比较简单,通过前面几个作业,大家一定知道如何编译了,所以,现在就只给出代码.大家自行编译吧.
我编写的都是C++代码,所以,希望朋友们起名的时候,应该是*.CPP才对哦(有点"肺"话啊!)
/* 作者:刘海涛 功能:在LINUX下,用fork生成3个子进程,并使用系统调用PIPE创建管道.使得这3个子进程共用一个管道 环境:G++,Rad Hat Enterprise Linux,gedit 时间:2008.4.1
*/ #include<iostream> #include<stdio.h> using namespace std; int main() { int i,r,p[3],fd[2]; char buffer[100],temp[100]; pipe(fd); while((p[0]=fork())==-1); if(p[0]==0) { lockf(fd[1],1,0); sprintf(buffer,"child process p1 is sending mess!/n"); cout<<"child process"<<" "<<"p[0]"<<endl; write(fd[1],buffer,100); sleep(1); lockf(fd[1],0,0); exit(0); } else { while((p[1]=fork())==-1); if(p[1]==0) { lockf(fd[1],1,0); sprintf(buffer,"child process p2 is sending mess!/n"); cout<<"child process"<<" "<<"p[1]"<<endl; write(fd[1],buffer,100); sleep(1); lockf(fd[1],0,0); exit(0); } else { while((p[2]=fork())==-1); if(p[2]==0) { lockf(fd[1],1,0); sprintf(buffer,"child process p3 is sending mess!/n"); cout<<"child process"<<" "<<"p[2]"<<endl; write(fd[1],buffer,100); sleep(1); lockf(fd[1],0,0); exit(0); } //wait(0); for(i=0;i<3;i++) { if(r=read(fd[0],temp,100)==-1) { cout<<"can`t read pipe"; } else { cout<<"the pipe is:"<<temp<<endl; } } exit(0); } } return 0; }
|