[PIPE]
Pipe 可以產生 process 與 process 之間的通道 (interprocess channel). 這根水管需要連通兩個 process, 所以 pipe 就需要兩個輸入參數 (fildes = file descriptors).
讀端為 fld descriptor[0], 寫端為 fld descriptor[1]. 反過來用的話, 並沒有定義 (unspecified). 讀端和寫端是用 FIFO 的方式讀寫.
它被視為一種進階或是 low level 的 IO 方式. 關閉的時候使用 close(), 使用 read()、write() 來存取資料.
[FIFO]
採用 mkfifo 建立一個 FIFO, FIFO 順利開成之後, 就可以用 open(FIFO_NAME, mode) 這種低階 IO 方式處理.
[POPEN], PHP 也有同名 function
用 popen 來打開, 相對用 pclose 來關閉. 用起來的感覺很像是開關一個 file. 因此它被視為基本或是 formatted Piping.
這個類似檔案的 pipe 打開之後, 就可以用 fprintf()、fscanf() 、fread()、fwrite() 來存取資料
PIPE/POPEN/FIFO 的實例
http://bantolinux.blogspot.com/2007/05/pipe-fifo-api-v1.html
http://fanqiang.chinaunix.net/a4/b7/20010808/0900001087_b.html
[Exercise]
比較特別的地方是, 雖然以上都把 pipe 當作 file 來用, 但是它真的是一個 process.
static char *process1="ls -al > dump1″;
static char *process2="rm *";
static char *process3="echo abc > text1″;
……
handle1 = popen(process1,"w");
fprintf(handle1, “%s", process3);
fflush(handle1);
handle2 = popen(process2, “w");
……
這個執行結果會是怎麼樣呢?