我已經讀程序日誌文件中要做到這一點,我想用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
aaa
read
read
read
read
read
bbb
read
read
read
read
...
,其中aaa和bbb是從讀出的文件中的行。
這個程序有什麼問題?
你期望你的程序做什麼? – ShiDoiSi 2010-09-04 12:39:05
等待選擇新行,當他們看到他們閱讀。現在看來,選擇什麼都不做。 – mmatloka 2010-09-04 12:42:41
你爲什麼要傳遞「fd + 1」來選擇?這聽起來不對。 – JesperE 2010-09-04 12:50:58