我使用FIFO使兩個進程進行通信。
讀FIFO:爲什麼會阻塞然後非阻塞
//client:
const char * msg = "Hello, I'm cleint1.";
const char * fifoName = "../server/fifo.tmp";
int fd = open(fifoName, O_WRONLY);
write(fd, msg, strlen(msg) + 1);
close(fd);
//server:
char msg[100];
const char * fifoName = "fifo.tmp";
mkfifo(fifoName, 0666);
int fd = open(fifoName, O_RDONLY);
while(read(fd, msg, 100) > 0)
{
std::cout<<"msg received: "<<msg<<std::endl;
}
close(fd);
unlink(fifoName);
服務器將首先阻塞在那裏等待一些消息在fifoName
。當一些消息到達時(客戶端執行),服務器讀取它們,然後循環結束。
我現在很困惑。因爲我不知道爲什麼服務器第一次調用read
並且它在那裏阻塞,而當它再次調用read
並且它不再阻塞時。
我打印的read
返回值和我收到的第一條消息後,得到0。
我需要的是使read
每次都被阻塞,以便服務器可以在某個客戶端發送消息後立即收到任何消息。
應打印字符串錯誤(錯誤),看看是什麼錯誤。 –
@SumitGemini,我打印'read'的回報,我得到0. – Yves
所以你想讓你的服務器無限運行?連續閱讀? –