gpt4 book ai didi

c - select() 不等待

转载 作者:行者123 更新时间:2023-12-01 23:05:54 25 4
gpt4 key购买 nike

我必须读取程序日志文件,为此我想使用 select() 和 read()

#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/select.h>
#include <fcntl.h>
#include <stdio.h>


int main()
{
int fd = -1;
fd_set fds;
struct timeval tv;
int rc;
char buffer[4096];
char * log_path = "/home/mich/a.txt";
if((fd = open(log_path,O_RDONLY) ) == -1 )
{
printf("error\n");
return -1;
}

while(1)
{

FD_ZERO(&fds);
FD_SET(fd,&fds);
tv.tv_sec = 2;
tv.tv_usec = 0;
rc = select(fd+1, &fds, NULL, NULL, &tv);

if (rc < 0) {
printf("failed\n");
continue;
} else if (rc > 0 && FD_ISSET(fd,&fds)) {
printf("read\n");
} else {
printf("timeout\n");
continue;
}
while ((my_getline(buffer,sizeof(buffer),fd)) > 0)
{
printf("%s",buffer);
}
}
close(fd);
}

my_getline 是一个使用 read() 的函数。

输出:

read
aaa
read
read
read
read
read
bbb
read
read
read
read
...

其中 aaa 和 bbb 是读取文件中的行。

这个程序出了什么问题?

最佳答案

select() 告诉您 read() 不会阻塞。

这包括它将返回 0 来指示文件结束的情况,这可能就是您所得到的。

关于c - select() 不等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3642292/

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