當前位置:編程學習大全網 - 編程語言 - 編寫壹個程序實現以下功能: (1)使用fork()創建進程。 (2)使用管道實現子進程和父進程之間的通信。

編寫壹個程序實現以下功能: (1)使用fork()創建進程。 (2)使用管道實現子進程和父進程之間的通信。

編寫壹段程序,使用系統調用fork( )創建兩個子進程。當此程序運行時,在系統中有壹個父進程和兩個子進程活動。讓每壹個進程在屏幕上顯示壹個字符;父進程顯示字符“a”,子進程分別顯示字符“b”和“c”。試觀察記錄屏幕上的顯示結果,並分析原因。

〈程序〉

#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!

附:我承認我是復制的 不過很符合題意~

  • 上一篇:花更少的錢,過精致生活
  • 下一篇:java怎麽運用切面編程生成日誌
  • copyright 2024編程學習大全網