Linux 程序 管道詳解

2021-10-01 12:55:53 字數 2278 閱讀 5276

gdb除錯:

設定父程序除錯路徑:set follow-fork-mode parent (預設)

設定子程序除錯路徑:set follow-fork-mode child

exec函式族:

使程序執行某一程式。成功無返回值,失敗返回 -1

int execlp(const char *file, const char *arg, ...); 借助 path 環境變數找尋待執行程式

參1: 程式名

參2: ar**0

參3: ar**1

...: ar**n

哨兵:null

int execl(const char *path, const char *arg, ...); 自己指定待執行程式路徑。

int execvp();

ps ajx --> pid ppid gid sid

孤兒程序:

父程序先於子進終止,子程序淪為「孤兒程序」,會被 init 程序領養。
殭屍程序:

子程序終止,父程序尚未對子程序進行**,在此期間,子程序為「殭屍程序」。  kill 對其無效。
wait函式: **子程序退出資源, 阻塞**任意乙個。

pid_t wait(int *status)

引數:(傳出) **程序的狀態。

返回值:成功: **程序的pid

失敗: -1, errno

函式作用1: 阻塞等待子程序退出

函式作用2: 清理子程序殘留在核心的 pcb 資源

函式作用3: 通過傳出引數,得到子程序結束狀態

獲取子程序正常終止值:

wifexited(status) --》 為真 --》呼叫 wexitstatus(status) --》 得到 子程序 退出值。

獲取導致子程序異常終止訊號:

wifsignaled(status) --》 為真 --》呼叫 wtermsig(status) --》 得到 導致子程序異常終止的訊號編號。

waitpid函式: 指定某乙個程序進行**。可以設定非阻塞。 waitpid(-1, &status, 0) == wait(&status);

pid_t waitpid(pid_t pid, int *status, int options)

引數: pid:指定**某乙個子程序pid

> 0: 待**的子程序pid

-1:任意子程序

0:同組的子程序。

status:(傳出) **程序的狀態。

options:wnohang 指定**方式為,非阻塞。

返回值:

> 0 : 表成功**的子程序 pid

0 : 函式呼叫時, 參3 指定了wnohang, 並且,沒有子程序結束。

-1: 失敗。errno

總結:

wait、waitpid	一次呼叫,**乙個子程序。

想**多個。while

程序間通訊的常用方式,特徵:

管道:簡單

訊號:開銷小

mmap對映:非血緣關係程序間

socket(本地套接字):穩定

管道:

實現原理: 核心借助環形佇列機制,使用核心緩衝區實現。

特質; 1. 偽檔案

2. 管道中的資料只能一次讀取。

3. 資料在管道中,只能單向流動。

侷限性:1. 自己寫,不能自己讀。

2. 資料不可以反覆讀。

3. 半雙工通訊。

4. 血緣關係程序間可用。

pipe函式: 建立,並開啟管道。

int pipe(int fd[2]);

引數: fd[0]: 讀端。

fd[1]: 寫端。

返回值: 成功: 0

失敗: -1 errno

管道的讀寫行為:

讀管道:

1. 管道有資料,read返回實際讀到的位元組數。

2. 管道無資料: 1)無寫端,read返回0 (類似讀到檔案尾)

2)有寫端,read阻塞等待。

寫管道:

1. 無讀端, 異常終止。 (sigpipe導致的)

2. 有讀端: 1) 管道已滿, 阻塞等待

2) 管道未滿, 返回寫出的位元組個數。

linux 管道建立程序

程序i o函式,與pclose函式一起使用。include stdio.h file popen const char command,const char type intpclose file stream popen 函式通過建立乙個管道,呼叫 fork 產生乙個子程序,執行乙個 shell ...

linux管道pipe詳解

管道是一種最基本的ipc機制,作用於有血緣關係的程序之間,完成資料傳遞。呼叫pipe系統函式即可建立乙個管道。有如下特質 1.其本質是乙個偽檔案 實為核心緩衝區 2.由兩個檔案描述符引用,乙個表示讀端,乙個表示寫端。3.規定資料從管道的寫端流入管道,從讀端流出。管道的原理 管道實為核心使用環形佇列機...

linux管道pipe詳解

管道是一種最基本的ipc機制,作用於有血緣關係的程序之間,完成資料傳遞。呼叫pipe系統函式即可建立乙個管道。有如下特質 1.其本質是乙個偽檔案 實為核心緩衝區 2.由兩個檔案描述符引用,乙個表示讀端,乙個表示寫端。3.規定資料從管道的寫端流入管道,從讀端流出。管道的原理 管道實為核心使用環形佇列機...