pipe管道

進程I/O

FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);

建立一個管道,調用 fork 產生一個子進程,執行一個 shell 運行命令來開啓一個進程web

type:
若是 type 是 「r」 則文件指針鏈接到 command 的標準輸出;若是 type 是」w」 則文件指針鏈接到 command 的標準輸入
command:
一個指向以 NULL 結束的 shell 命令字符串的指針。這行命令將被傳到 bin/sh 並使用-c 標誌,shell 將執行這個命令shell

例子:svg

fp = popen("ls", "r");
fread(buf, 1, 100, fp);
puts(buf);

fp = popen("cat > test.c", "w");
fwrite(buf, 1, 100, fp);

進程間通訊

建立 (二選一):spa

int mkfifo(const char *filename, mode_t mode);  
int mknod(const char *filename, mode_t mode | S_IFIFO, (dev_t)0);

打開:指針

int open(const char *pathname, int flags);

除了open的默認flags。還有一個非阻塞標誌O_NONBLOCKcode

阻塞:
1.對於以只讀方式(O_RDONLY)打開的FIFO文件,若是open調用是阻塞的(即第二個參數爲O_RDONLY),除非有一個進程以寫方式打開同一個FIFO,不然它不會返回;若是open調用是非阻塞的的(即第二個參數爲O_RDONLY | O_NONBLOCK),則即便沒有其餘進程以寫方式打開同一個FIFO文件,open調用將成功並當即返回
2.對於以只寫方式(O_WRONLY)打開的FIFO文件,若是open調用是阻塞的(即第二個參數爲O_WRONLY),open調用將被阻塞,直到有一個進程以只讀方式打開同一個FIFO文件爲止;若是open調用是非阻塞的(即第二個參數爲O_WRONLY | O_NONBLOCK),open總會當即返回,但若是沒有其餘進程以只讀方式打開同一個FIFO文件,open調用將返回-1,而且FIFO也不會被打開xml

相關文章
相關標籤/搜索