什么是更快,管道| fifo

时间:2014-10-21 11:52:08

标签: c linux pipe fifo

linux中的速度更快:pipe还是fifo?理论管道速度更快,但我如何用C程序检查? 我试图在两个进程之间发送一条消息,但是从发送到接收消息的时间仍然是由于消息的长度而无懈可击。

代码的一部分:

struct timeval start,end;
char mesaj[100000]="";
for(i=0;i<99999;i++)
   strcat(mesaj,"d");
gettimeofday(&start,NULL);
if(fork()==0)
{
    write(fd,mesaj,strlen(mesaj));
    exit(0);
 }
 read(fd,mesaj,strlen(mesaj));
gettimeofday(&end,NULL);
long time=(end.tv_usec-start.tv_usec)/1000 + (end.tv_sce-start.tv_sec)*1000;
printf("Fifo time &lu\n",time);

2 个答案:

答案 0 :(得分:3)

fifo与linux中的pipe共享相同的实现,因此它们同样快。

两者的主要区别在于如何创建/打开它们。

如果你想测量它,你需要做一些可测量的工作。例如尝试读/写100MB数据(使用循环)。您还需要检查错误,因为测量失败所需的速度并不是您想要的,并且您需要检查您实际读取和写入的是100MB。

答案 1 :(得分:0)

  

read()尝试读取从文件描述符fd到的字节数   缓冲区从buf开始。

这意味着如果你留在父进程中,你将读取0个字节并继续。你应该通知父母读数已经结束并且忙着等待它。尝试使用信号或轮询父进程上的文件,并在写完成后写入1