如何使用stdout选择?

时间:2013-02-20 15:25:49

标签: c select stdout

我有以下代码

    fd_set          set;
    struct          timeval timeout;
    printf("first printf\n"); // displayed
    FD_ZERO(&set);
    timeout.tv_sec = 1;

    FD_SET(fileno(stdout), &set);
    if (select(FD_SETSIZE, NULL, &set, NULL, &timeout)!=1)
    {
        stdout_closed = true;
        return;
    }
    printf("second printf\n"); // Not displayed

我试图在printf("second printf\n");之前检查写入stdout的能力。但是使用此代码,select返回值!= 1,然后printf保持不可缓存。它看起来像选择返回“不可能”来写入标准输出。

你能解释一下这种行为吗?

1 个答案:

答案 0 :(得分:4)

对select()的调用返回-1,而errno是22(无效参数),因为你在超时中有垃圾值。试试这个:

FD_ZERO(&set);
timeout.tv_sec = 1;
timeout.tv_usec = 0; /* ADD THIS LINE to initialize tv_usec to 0 so it's valid */

它应该有用。