次のコードがあります
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 は値を返し、!= 1
printf は到達不能のままです。選択が stdout に書き込むことが「不可能」であるように見えます。
この振る舞いを説明していただけますか?