更新:コードと問題の説明を更新して、変更を反映させました。
非ソケットでソケット操作を試みていることがわかりました。または、次の理由で fd_set が無効であること:
select
-1 を
WSAGetLastError()
返し、10038 を返します。
しかし、私はそれが何であるかを理解できないようです。プラットフォームは Windows です。その部分は掲載していませんWSAStartup
。
int loop = 0;
FILE *output
int main()
{
fd_set fd;
output = _popen("tail -f test.txt","r");
while(forceExit == 0)
{
FD_ZERO(&fd);
FD_SET(_fileno(output),&fd);
int returncode = select(_fileno(output)+1,&fd,NULL,NULL,NULL);
if(returncode == 0)
{
printf("timed out");
}
else if (returncode < 0)
{
printf("returncode: %d\n",returncode);
printf("Last Error: %d\n",WSAGetLastError());
}
else
{
if(FD_ISSET(_fileno(output),&fd))
{
if(fgets(buff, sizeof(buff), output) != NULL )
{
printf("Output: %s\n", buff);
}
}
else
{
printf(".");
}
}
Sleep(500);
}
return 0;
}
新しい結果はもちろん、リターンコードと最後のエラーの出力です。