用管道實現執行緒驅動和通訊

2021-07-09 02:40:05 字數 1040 閱讀 2585

一,管道讀寫規則

當沒有資料可讀時

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 的媒介,只不過其具體實現方式與管...