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系統最常見的程序間通訊方式之一,它在兩個程序之間實現乙個資料流通的通道,資料以一種資料流的方式在程序間流動。它把乙個程式的輸出直接連到另乙個程式的輸入。管道可以分為以下兩種,利用這兩種管道可以實現程序間的通訊,但是對於程序間的關係會有所限制 解決和 方法如下,資料以字元為例,通訊的內...
利用管道進行通訊
管道簡介 管道是單向的 先進先出的 無結構的 固定大小的位元組流,它把乙個程序的標準輸出和另乙個程序的標準輸入連線在一起。寫程序在管道的尾端寫入資料,讀程序在管道的首端讀出資料。資料讀出後將從管道中移走,其它讀程序都不能再讀到這些資料。管道提供了簡單的流控制機制。程序試圖讀空管道時,在有資料寫入管道...