更新:我更新了代码和问题描述以反映我的更改。
我现在知道我正在非套接字上尝试套接字操作。或者我的 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;
}
现在的新结果当然是打印出返回码和最后一个错误。