gpt4 book ai didi

c - 这个 _popen/select 示例有什么问题?

转载 作者:行者123 更新时间:2023-12-03 03:30:31 24 4
gpt4 key购买 nike

更新:我更新了代码和问题描述以反射(reflect)我的更改。

我现在知道我正在尝试对非套接字进行套接字操作。或者我的 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;
}

现在的新结果当然是打印出返回码和最后一个错误。

最佳答案

您有一些数据可供读取,但您实际上并未读取任何内容。当您下次轮询描述符时,数据仍然存在。在继续轮询之前排空管道。

关于c - 这个 _popen/select 示例有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/152807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com