函式原型:pid_t wait_pid(pid_t pid, int *status, int options);
其中:
pid(1.2 用的比較多)
1.pid > 0 : 某個子程序的pid
2.pid == -1:**所有子程序
**的時候迴圈**
while( (wpid = waitpid(-1,&status,xx)) != -1 )
3.pid == 0 :**當前程序組所有子程序
4.pid < 0 : 子程序的pid取反(相當於加「-「」)
options0 : waitpid 阻塞
wnohang : 非阻塞
返回值
-1: **失敗,沒有子程序
大於0: 被**子程序的pid
如果為非阻塞 0: 子程序處於執行狀態
引數 : status
判斷子程序是如何死的:
a. 正常退出
b. 被某個訊號殺死
c. 如果不關心怎麼死的 就寫成 null
呼叫一次只能**乙個子程序一. 神馬是程序間通訊(ipc):interprocess communication
二.程序間通訊常用的4種方式
管道:簡單
訊號:系統開銷小
共享對映區:有無血緣關係的都可以
本地套接字:穩定
一.管道的概念
本質:a.核心緩衝區
b.偽檔案- 不占用磁碟空間
特點:a.讀端,寫端對應兩個檔案描述符
資料寫端流入,讀端流出
b.操作管道的程序被銷毀之後,管道自動被釋放了
c.管道預設是阻塞的。讀寫。
二.管道的原理
內部實現方式是佇列:環形佇列,先進先出
緩衝區的大小:預設4k,會根據實際情況做適當調整
三.管道的侷限性
佇列:內部只能讀取一次,不能重複讀取
半雙工:
a.單工:遙控器
b.半雙工:對講機(資料傳輸方向是單向的)
c.雙工:**
匿名管道:適用於有血緣關係的程序
四. 建立匿名管道
int pipe(int fd[2]);
fd-傳出引數 fd[0]-讀端 fd[1]-寫端
單個程序能否使用管道完成讀寫操作?可以的。
注意事項:
父程序讀-----需要關閉寫端
子程序寫-----需要關閉讀端
a. 父子程序間通訊,實現ps aux | grep bash
b. 兄弟程序間通訊,實現ps aux | grep bash
a.父子間程序通訊的實現思路
練習a **:
// an highlighted block
#include
#include
#include
#include
#include
#include
#include
int main
(int argc,
const char *ar**)
pid_t pid =
fork()
;if(pid ==-1
)//parent ps aux
if(pid >0)
//child grep "bash"
else
if(pid ==0)
printf
("pipe[0] = %d\n"
, fd[0]
);printf
("pipe[1] = %d\n"
, fd[1]
);close
(fd[0]
);close
(fd[1]
);return0;
}
a.兄弟間程序通訊的實現思路
練習a **:
#include
#include
#include
#include
#include
#include
#include
int main
(int argc,
const char *ar**)
for(i =
0; i < num; i++)if
(pid ==0)
//只建立兄弟程序
}//子程序1 ps aux
if(i ==0)
//子程序2 grep "bash"
if(i ==1)
//父程序
if(i == num)
printf
("child died pid = %d\n"
, wpid);}
}printf
("pipe[0] = %d\n"
, fd[0]
);printf
("pipe[1] = %d\n"
, fd[1]
);return0;
}
2019/2/25 胡雲層 於 day2知識總結
知識總結 1.變數 程式執行期間,內容在一定範圍之內可以發生改變的量。2.如何使用變數 a 乙個步驟 資料型別 變數名稱 資料值 b 兩個步驟 資料型別 變數名稱 變數名稱 資料值 3.識別符號 見名知意。類名稱每個單詞首字母大寫 變數名稱第乙個單詞首字母小寫,從第二個單詞開始首字母大寫。4.資料型...
linux系統程式設計知識(一)
注 本文為 unix linux程式設計實踐指導 有關筆記。1.檔案 dev tty 與終端有關的檔案 是鍵盤和顯示器的裝置描述檔案,向這個檔案寫相當於顯示在使用者的螢幕上,讀相當於從鍵盤獲得使用者的輸入。即使程式的輸入 輸出被 重定向,程式還是可以通過這個檔案與終端交換資料。2.從unix中學習u...
程式語言 day 2
標準庫提供的一次讀寫乙個字元的函式 test 3 將輸入一次乙個字元的複製到輸出 include int main putchar c 輸出 printf count d,line d,space d n count,line,space return 0 檔案結束 eof end of file ...