一,管道讀寫規則
當沒有資料可讀時
o_nonblock disable:read呼叫阻塞,即程序暫停執行,一直等到有資料來到為止。
o_nonblock enable:read呼叫返回-1,errno值為eagain。
當管道滿的時候
o_nonblock disable: write呼叫阻塞,直到有程序讀走資料
o_nonblock enable:呼叫返回-1,errno值為eagain
所以我們如果要實現乙個簡單基於事件機制的執行緒時,可以讓執行緒阻塞在管道上,執行緒的喚醒可以通過管道實現。阻塞的時候,執行緒是會讓出cpu的。
二,**示例如下:
#include
#include
#include
#include
#include
#include
#include
void format_time(char *buf, int buflen)
int g_fds[2];
void * pipe_read(void *param)
; format_time(str, 512);
printf("time:%s\n",str);
char buf[10] = ;
read(g_fds[0],buf,10);
printf("receive datas = %s\n",buf);
format_time(str, 512);
printf("time:%s\n",str);
return;
}int main(void)
pthread_t ptid1;
pthread_create(&ptid1,null,pipe_read,null);
sleep(10);
write(g_fds[1],"hello",5);
pthread_join(ptid1,null);
return
0;}
程序間通訊(管道和有名管道)
管道 pipe 是兩個程序之間進行單向通訊的機制,因為它的單向性,所以又稱為半雙工管道。它主要用於程序間的一些簡單通訊。資料只能由乙個程序流向另乙個程序 乙個寫管道,乙個讀管道 如果要進行全雙工通訊,需要建立兩個管道。管道只能用於父子程序或者兄弟程序之間的通訊。管道沒有名字,且其緩衝區大小有限。乙個...
命名管道實現程序間通訊
include include include include include include include define fifo server tmp myfifo main int argc,char argv argc 引數個數?argv 引數 else printf write s to...
利用管道實現程序間通訊
管道 pipe 是程序用來通訊的共享記憶體區域。乙個程序往管道中寫入資訊,而其它的程序可以從管道中讀出資訊。如其名,管道是程序間資料交流的通道。郵路 mailslots 的功能與管道類似,也是程序間通訊 interprocess communications,ipc 的媒介,只不過其具體實現方式與管...