APUE讀書筆記 高階程序通訊(管道)

2021-08-15 18:41:02 字數 1359 閱讀 5711

假設我們要將乙個檔案的資料,通過more程式來顯示

但不希望建立臨時檔案, 即先複製整個檔案,再用more來展示

我們可以把檔案的資料塞入乙個管道,  more程式(由子程序excel啟動)讀這些資料,並顯示在螢幕上

和直接more乙個檔案有啥區別???

#include "apue.h"

#include #define def_pager "/bin/more"

int main(int argc, char *argv)

if(ferror(fp))

err_sys("fgets error");

close(fd[1]);

if(waitpid(pid, null, 0) < 0)

err_sys("waitpid error");

exit(0);

}else

//關閉fd0,則此時只有描述符0指向讀管道端。

//即不再是通過fd0與管道聯絡,而是標準輸入與管道聯絡

//即不再是fd0讀管道,而是子程序的標準輸入讀管道。

close(fd[0]);

} if((***** = getenv("pager")) == null)

***** = def_pager;

if((argv0 = strrchr(*****, '/')) != null)

argv0++;

else argv0 = *****;

//啟用./bin/more

//此時,我們可以在終端上輸入命令,傳給more程序即分頁讀程序

execl(*****, argv0, (char *)0);

}}

popen直接將fork和建立單向管道合併在了一起,並且支援緩衝區,即返回檔案指標。

這個是大寫轉小寫chengxu

#include "apue.h"

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

exit(0);

}

#include "apue.h"

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

if(pclose(fpin) == -1)

err_sys("pclose error");

putchar("\n");

exit(0);

}

通過popen,建立了乙個過濾程式,      主程式給螢幕輸出提示, 我們從螢幕輸入一行字串,字串傳給過濾程式,過濾程式處理後傳送給主程式,主程式輸出

注意要經常洗刷緩衝區,即把他輸出出來。

APUE讀書筆記 程序通訊

程序通訊 1,管道 pipe 在理解管道時需要注意的地方 管道是半雙工的,不能假設它是全雙工的。它只能用在有公共祖先的程序之間。比如shell幾個命令之間用管道連線,但父程序都是終端程序。1.1 管道的建立 include int pipe int filedes 2 管道一般用在有共同祖先的程序間...

APUE筆記 高階程序間通訊

unix 域套接字 unix域套接字,使用socket相同的介面,用於程序間通訊 但它僅僅進行資料複製,不新增報頭,不計算校驗和 unix域套接字,在系統中建立兩個檔案,檔案不實際儲存資料,指向核心空間中相應位址 使用socketpair建立乙個類似於管道的socketfd fd 2 不同於管道,此...

APUE讀書筆記 14 程序關係 下

一 會話 會話是乙個或者多個程序組的集合,如下圖中乙個會話有三個程序組 會話中的程序組通常是由shell中的管道 進行連線的,比如上圖的安排可能是有如下命令形成的 p1 p2 p3 p4 p5,程序呼叫setsid函式可以建立乙個新會話。如果呼叫這個函式的程序不是乙個程序組的組長,那麼將會發生以下三...