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;
}
4

1 回答 1

1

此功能在我取出 O_NONBLOCK 时也有效

当您将文件描述符标记为非阻塞时,通常可以阻塞的所有操作(例如read(2),和write(2))都返回-1并设置errno = EAGAIN

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

于 2013-03-17T04:51:42.100 回答