2013-03-17 69 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