当前位置: 技术问答>linux和unix
Linxu中FIFO问题
来源: 互联网 发布时间:2016-06-13
本文导语: 我在程序中使用FIFO进行进程间通信,现在的问题是,如果我的进程正在做其他工作,这个时候FIFO里有数据到来了,我该怎么做才能优先响应FIFO中的数据接收和处理呢?是不是会有中断产生,那么如何处理这个中断,...
我在程序中使用FIFO进行进程间通信,现在的问题是,如果我的进程正在做其他工作,这个时候FIFO里有数据到来了,我该怎么做才能优先响应FIFO中的数据接收和处理呢?是不是会有中断产生,那么如何处理这个中断,谢谢了!
|
select:
fd 为mkfifo获得的文件描述符
FD_SET fdReads;
while(1)
{
FD_ZERO(&fdReads);
FD_SET(fd,&fdReads);
select(fd+1,&fdReads,NULL,NULL,&timeout);
if(FD_ISSET(fd,&fdReads))
{
break;
}
}
fd 为mkfifo获得的文件描述符
FD_SET fdReads;
while(1)
{
FD_ZERO(&fdReads);
FD_SET(fd,&fdReads);
select(fd+1,&fdReads,NULL,NULL,&timeout);
if(FD_ISSET(fd,&fdReads))
{
break;
}
}
|
感觉 select 也可以各 没有啥中断
mkfifo open 然后用 select 监听 fd
mkfifo open 然后用 select 监听 fd
|
select就可以。
检测到FIFO描述符有数据。,立刻处理。
检测到FIFO描述符有数据。,立刻处理。
|
你可以专门开个线程等待是否有数据来,如果有数据来,可以建立一个线程或者通知其它线程处理这些数据,然后继续等待。
|
用epool处理
|
支持,而且并发数更大
|
select
|
fifo是先进先出, 跟管道有共同的地方吗
|
开个线程,专门处理FIFO数据
|
这只能多线程了 呵呵