2013-03-17 73 views
1

我正在写一个简短的程序,轮询命名管道的缓冲区。为了测试它,我将登录到“nobody”并回显到管道中。当它挂起时,我从其他用户登录并运行读取缓冲区的程序。运行时,程序不会返回任何内容,而另一个用户将从系统中注销。这里的读取功能:命名管道终止会话

void ReadOut(char * buf) 
{ 
    ZERO_MEM(buffer, BUF_SIZE); 

    int pipe = open(buf, O_RDONLY | O_NONBLOCK); 

    if(pipe < 0) 
    { 
      printf("Error %d has occured.\n" , pipe); 
      return; 
    } 

    while(read(pipe, buffer, 2) > 0) printf("%s \n" , buffer); 
    close(pipe); 

    return; 
} 
+0

'写'功能,类似于此,工作得很好。当我知道O_NONBLOCK – tay10r 2013-03-17 04:48:42

回答

1

当我拿出O_NONBLOCK

当你标记一个文件描述符非阻塞此功能也适用,通常可以阻止(例如read(2)的所有操作,和write(2))改为返回-1,并设置errno = EAGAIN

因此,您的情况read立即返回-1信号“我现在还没有准备好,请稍后再试”。

+0

时,此功能也适用。问题是没有错误的迹象,我没有收到任何数据。 – tay10r 2013-03-17 04:56:31

+0

@TaylorFlores当你返回<0时,你检查'read'填充的'errno'吗? – cnicutar 2013-03-17 04:58:31

+0

你是什么意思?我是新来的linux – tay10r 2013-03-17 04:59:47