다음 코드 단편을 고려하십시오.새로운 데이터 가용성에 대한 파일 설명자를 모니터하는 방법은 무엇입니까?
#include <fcntl.h>
#include <stdio.h>
#include <sys/poll.h>
#include <unistd.h>
int main(int argc, char ** argv) {
int fd;
char buf[1024];
int i;
struct pollfd pfds;
fd = open(argv[1], O_RDONLY);
while (1) {
pfds.fd = fd;
pfds.events = POLLIN;
poll(&pfds, 1, -1);
if (pfds.revents & POLLIN) {
i = read(fd, buf, 1024);
write(1, buf, i);
}
}
return 0;
}
이 프로그램은 파일 이름을 받고, 해당 파일을 열고, 파일 디스크립터를 "폴링 (poll)"하여 가용성 데이터를 모니터합니다. poll
이 가용성의 데이터를 감지 할 때마다 새 데이터가 인쇄됩니다.
그러나이 프로그램은 어떻게됩니까? 프로그램을 시작할 때 모니터링 할 파일에 이미 포함 된 데이터가 있으면 해당 내용이 인쇄됩니다. 괜찮아. 그러나 나중에 텍스트 편집기로 파일을 편집하여 저장하면 프로그램이 새 데이터를 인쇄하지 않습니다.
그렇다면 새로운 데이터 가용성을 위해 일반 파일 설명자 (경로를 사용하는 파일이 아닌)를 모니터링하는 방법은 무엇입니까? poll
이외의 다른 기능을 사용해야합니까? 또는 pollfd
플래그가 누락 되었습니까?
[fstat] (http://linux.die.net/man/2/fstat)를 호출하고'EBADF'를 확인해야하지만 실제로'poll'의 반환 값을 살펴 보는 것이 도움이됩니다. 시스템 콜을 먼저! –
'poll'은 일반 디스크 파일에서는 작동하지 않습니다. –