c - 命名管道终止 session

标签 c linux named-pipes

我正在编写一个小程序,用于轮询命名管道的缓冲区。为了测试它,我将登录到“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;
}

最佳答案

This function also works when I take out O_NONBLOCK

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

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

关于c - 命名管道终止 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15457630/

相关文章:

c++ - 使用同一库的多个版本时的符号解析

linux - 用户名中的 pkill 通配符

python - 在 C++ 和 Python 程序中使用命名管道的 IPC 挂起

c# - HttpWebRequest 支持命名管道吗?

c - unix域套接字VS命名管道?

c - Linux 中 timersub() 函数的隐式声明 - 我必须定义什么?

c - 什么是 Antlr3 C 运行时等效于抛出错误报告的异常

c - 递增函数指针

linux - xprop 设置原子属性的多个字段

c - 我必须使用哪些命令才能通过 I²C 使用 SSD1306?