2011-11-08 2 views
15

epoll (Linux)은 일반 파일에 유용 할 수 있습니까? 나는 그것이 소켓과 함께 주로 사용된다는 것을 알고 있지만 궁금합니다.Epoll 일반 파일

답변

11

아니요. epoll은 일반적으로 파이프 및 소켓과 같이 읽기/쓰기에 대한 차단 동작을 나타내는 파일 설명자에 대해서만 의미가 있습니다. 일반 파일 기술자는 항상 결과 또는 파일 끝을 어느 정도 즉시 반환하므로 epoll은 그 (것)들을 위해 유용한 아무것도하지 않을 것입니다.

+2

, 그것은하지만 의미없이, 기능 : "설문 조사() 함수는 ... 일반 파일은 항상 읽기와 쓰기에 대한 TRUE 폴링해야 일반 파일을 지원해야한다." http://pubs.opengroup.org/onlinepubs/009695399/functions/poll.html epoll (4) 매뉴얼 페이지는 다음과 같이 말합니다 : "레벨 트리거 인터페이스로 사용되면 epoll은 빠른 투표 (2)와 동일한 의미론을 공유하므로 후자가 사용되는 곳이면 어디서든 사용할 수 있습니다. " 따라서 황혼 폐사 (Duskwuff)가 말했듯이, 그것은 유용하지 않습니다. – mkj

+1

이것은 어리 석고 잘못되었습니다. 커널은 디스크 스핀 업 (잠들 경우)에서 네트워크 마운트 공유/드라이브의 네트워크 지연까지 여러 가지 이유로 전화를 끊을 수 있습니다. 모든 종류의 장치 상호 작용으로 IO 중단이 발생할 수 있습니다. select/epoll/poll/kqueue는 파일 설명자뿐만 아니라 비 차단을 허용해야하는 파일 설명과 함께 작동하도록 만들어야합니다. – Rahly

+0

@ Rahly 불가능합니다. 커널은 소켓이나 파이프와 달리 파일에 대한 쓰기가 차단되는지 미리 알지 못합니다. 파일 시스템 쓰기 용 버퍼는 단일 FD에 전용되지 않으므로 특정 프로세스에 사용할 수 있음을 보장 할 방법이 없습니다 . – duskwuff

11

가 나는 EPERM와 위해서 epoll_ctl에 실패, 생각 : 파일이 더 poll() 인터페이스가 없습니다

EPERM The target file fd does not support epoll. 

합니다.

실제 코드는 http://lxr.linux.no/#linux+v3.1/fs/eventpoll.c#L1373

1373 /* The target file descriptor must support poll */ 
1374  error = -EPERM; 
1375  if (!tfile->f_op || !tfile->f_op->poll) 
1376    goto error_tgt_fput; 
1377 
관련 문제