〈程序〉
#include<stdio.h>
main()
{
int p1,p2;
if(p1=fork()) /*子進程創建成功*/
putchar('b');
else
{
if(p2=fork()) /*子進程創建成功*/
putchar('c');
else putchar('a'); /*父進程執行*/
}
}
<運行結果>
bca(有時會出現abc的任意的排列)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
編制壹段程序,實現進程的管道通信。使用系統調用pipe()建立壹條管道線。兩個子進程p1和p2分別向通道個寫壹句話:
child1 process is sending message!
child2 process is sending message!
而父進程則從管道中讀出來自兩個進程的信息,顯示在屏幕上。
〈程序〉
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
int pid1,pid2;
main( )
{
int fd[2];
char outpipe[100],inpipe[100];
pipe(fd); /*創建壹個管道*/
while ((pid1=fork( ))==-1);
if(pid1==0)
{
lockf(fd[1],1,0);
sprintf(outpipe,"child 1 process is sending message!");
/*把串放入數組outpipe中*/
write(fd[1],outpipe,50); /*向管道寫長為50字節的串*/
sleep(5); /*自我阻塞5秒*/
lockf(fd[1],0,0);
exit(0);
}
else
{
while((pid2=fork( ))==-1);
if(pid2==0)
{
lockf(fd[1],1,0); /*互斥*/
sprintf(outpipe,"child 2 process is sending message!");
write(fd[1],outpipe,50);
sleep(5);
lockf(fd[1],0,0);
exit(0);
}
else
{
wait(0); /*同步*/
read(fd[0],inpipe,50); /*從管道中讀長為50字節的串*/
printf("%s\n",inpipe);
wait(0);
read(fd[0],inpipe,50);
printf("%s\n",inpipe);
exit(0);
}
}
}
〈運行結果〉
延遲5秒後顯示:
child1 process is sending message!
再延遲5秒:
child2 process is sending message!
附:我承認我是復制的 不過很符合題意~