1

次のコードがあります

    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

前に stdout に書き込む機能を確認しようとしていprintf("second printf\n");ます。しかし、このコードでは、select は値を返し、!= 1printf は到達不能のままです。選択が stdout に書き込むことが「不可能」であるように見えます。

この振る舞いを説明していただけますか?

4

1 に答える 1

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 */

そしてそれはうまくいくはずです。

于 2013-02-20T15:36:42.053 に答える