1. 函數說明
pipe(建立管道):
1) 頭文件 #include<unistd.h>
2) 定義函數: int pipe(int filedes[2]);
3) 函數說明: pipe()會建立管道,并將文件描寫敘述詞由參數filedes數組返回。
????????????? filedes[0]為管道里的讀取端
????????????? filedes[1]則為管道的寫入端。
4) 返回值:? 若成功則返回零,否則返回-1,錯誤原因存于errno中。
??? 錯誤代碼:
???????? EMFILE 進程已用完文件描寫敘述詞最大量
??????? ?ENFILE 系統已無文件描寫敘述詞可用。
???????? EFAULT 參數 filedes 數組地址不合法。
2. 舉例
#include <unistd.h> #include <stdio.h> int main( void ) { int filedes[2]; char buf[80]; pid_t pid; pipe( filedes ); pid=fork(); if (pid > 0) { printf( "This is in the father process,here write a string to the pipe.\n" ); char s[] = "Hello world , this is write by pipe.\n"; write( filedes[1], s, sizeof(s) ); close( filedes[0] ); close( filedes[1] ); } else if(pid == 0) { printf( "This is in the child process,here read a string from the pipe.\n" ); read( filedes[0], buf, sizeof(buf) ); printf( "%s\n", buf ); close( filedes[0] ); close( filedes[1] ); } waitpid( pid, NULL, 0 ); return 0; }
執行結果:
[root@localhost src]# gcc pipe.c
[root@localhost src]# ./a.out
This is in the child process,here read a string from the pipe.
This is in the father process,here write a string to the pipe.
Hello world , this is write by pipe.
當管道中的數據被讀取后,管道為空。一個隨后的read()調用將默認的被堵塞,等待某些數據寫入。
若須要設置為非堵塞,則可做例如以下設置:
??????? fcntl(filedes[0], F_SETFL, O_NONBLOCK);
??????? fcntl(filedes[1], F_SETFL, O_NONBLOCK);
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
