程序間利用管道進行通訊 列印斐波那契數列

2021-08-14 05:23:03 字數 1535 閱讀 3131

fibonacci序列是0,

1, 1,

2, 3,

5, 8, ...

. ,通常它可以表示為:

f ib

0 = 0

f ib

1 = 1

f ibn

= f ibn−1

+ f ibn−2

編寫乙個

c程式,使用系統呼叫

fork()

建立兩個子程序p1和

p2。他們的任務如下:

1)       

子程序p1

列印自己的

pid,然後使用

exec

(族)系統呼叫顯示當前目錄下檔案和子目錄的詳細資訊。

2)       

子程序p2

中生成fibonacci

序列,序列的個數在程式命令列中作為引數傳入,例如,引數為

7,則子程序

p2生成的

fibonacci

序列為0、1

、2、3

、5、8

、13。通過某種程序通訊機制(共享記憶體、管道、訊息等

ipc機制),子程序

p2把生成的

fibonacci

序列傳送給父程序,並由父程序輸出(列印)

fibonacci

序列。在父子程序通訊的過程中必須實現同步,以使在子程序完成生成序列之前,父程序不會輸出

fibonacci

序列。使用

wait()

系統呼叫可以實現程序間的簡單同步。執行必要的錯誤檢查以保證不會接受命令行引數傳遞來的負值。

採用fork()建立程序,程序在建立的時候共享了父程序的所有資源,包括pc程式計數器,這時候父子程序的程式計數器都是pid=fork()的等號上,也即move操作上,只不過返回的值在核心**中區分了返回的不同,父程序得到了》0的乙個pid_t,子程序為0.

通過pipe命令,利用管道進行通訊

#include #include #include #include #include #include #include int main(int argc,const char* argv)

pid_t childpid1,childpid2;

int pfd[2];//管道

int n = atoi(argv[1]); //獲得引數

childpid1 = fork();

if( childpid1 < 0)

else if( childpid1 == 0)

else

else if( childpid2 == 0)

}else

printf("%d、",status);

}int ret = read(pfd[0],&status,sizeof(status));

if(ret < 0)

printf("%d\n",status);}}

return exit_success;

}

利用管道實現程序間通訊

管道 pipe 是程序用來通訊的共享記憶體區域。乙個程序往管道中寫入資訊,而其它的程序可以從管道中讀出資訊。如其名,管道是程序間資料交流的通道。郵路 mailslots 的功能與管道類似,也是程序間通訊 interprocess communications,ipc 的媒介,只不過其具體實現方式與管...

利用管道實現多程序間通訊

管道是linux系統最常見的程序間通訊方式之一,它在兩個程序之間實現乙個資料流通的通道,資料以一種資料流的方式在程序間流動。它把乙個程式的輸出直接連到另乙個程式的輸入。管道可以分為以下兩種,利用這兩種管道可以實現程序間的通訊,但是對於程序間的關係會有所限制 解決和 方法如下,資料以字元為例,通訊的內...

利用管道進行通訊

管道簡介 管道是單向的 先進先出的 無結構的 固定大小的位元組流,它把乙個程序的標準輸出和另乙個程序的標準輸入連線在一起。寫程序在管道的尾端寫入資料,讀程序在管道的首端讀出資料。資料讀出後將從管道中移走,其它讀程序都不能再讀到這些資料。管道提供了簡單的流控制機制。程序試圖讀空管道時,在有資料寫入管道...