1. 函數(shù)說明
pipe(建立管道):
1) 頭文件 #include<unistd.h>
2) 定義函數(shù): int pipe(int filedes[2]);
3) 函數(shù)說明: pipe()會建立管道,并將文件描寫敘述詞由參數(shù)filedes數(shù)組返回。
????????????? filedes[0]為管道里的讀取端
????????????? filedes[1]則為管道的寫入端。
4) 返回值:? 若成功則返回零,否則返回-1,錯誤原因存于errno中。
??? 錯誤代碼:
???????? EMFILE 進程已用完文件描寫敘述詞最大量
??????? ?ENFILE 系統(tǒng)已無文件描寫敘述詞可用。
???????? EFAULT 參數(shù) filedes 數(shù)組地址不合法。
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;
}
執(zhí)行結(jié)果:
[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.
當管道中的數(shù)據(jù)被讀取后,管道為空。一個隨后的read()調(diào)用將默認的被堵塞,等待某些數(shù)據(jù)寫入。
若須要設(shè)置為非堵塞,則可做例如以下設(shè)置:
??????? fcntl(filedes[0], F_SETFL, O_NONBLOCK);
??????? fcntl(filedes[1], F_SETFL, O_NONBLOCK);
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

