嘗試從多個FIFO中讀取時,我遇到了一個非常惱人的問題。我有1個進程等待來自fifo的結構,很少有進程將這些結構發送給信號。在第一次閱讀後,我無法從任何信號中讀出更多。它看起來像程序凍結。無法從多個FIFO中讀取
發送進程具有這主要與
myfifo = '/tmp/myfifo{0}' //{0} is a number that every process has individual.
mkfifo(myfifo, 0666);
fd = open(myfifo, O_WRONLY);
write(fd, &demon1 , sizeof(demon1));
close(fd);
while (1)
{
}
而這signal_handler
void signal_handler(int signum)
{
if (signum == SIGUSR1)
{
//some declarations here
mkfifo(myfifo, 0666);
fd = open(myfifo, O_WRONLY | O_NONBLOCK);
write(fd, &demon1 , sizeof(demon1));
}
}
在閱讀過程中有
myfifo[i] = /tmp/myfifo{0} // {0} is i which is the number of process that sends.
while(1)
{
for(i=0;i<n;i++)
{
fd = open(myfifo[i], O_RDONLY | O_NONBLOCK);
r = read(fd, &demon1, sizeof(demon1));
if(r > 1)
{
//printf struct elements
}
}
}
請發送一個簡單的工作示例。例如,您是否在打開_reading process_後再次關閉每個fd?否則,你將很快用完文件描述符 – Ctx
,這大部分是其他事物正在打印和設置目錄的一切。 – Thomas
我建議讀取'man 7 fifo'的輸出,特別是關於在非阻塞模式下打開FIFO的部分。我認爲當FIFO的另一端沒有打開時,你的只寫,非阻塞的'open'將會失敗,並帶有errno'ENXIO'。 –