假設我們要將乙個檔案的資料,通過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函式可以建立乙個新會話。如果呼叫這個函式的程序不是乙個程序組的組長,那麼將會發生以下三...