2011-11-08 11 views
15

epoll (लिनक्स पर) नियमित फ़ाइलों के लिए किसी भी तरह उपयोगी हो सकता है? मुझे पता है कि यह मुख्य रूप से सॉकेट के साथ प्रयोग किया जाता है लेकिन बस आश्चर्य है।नियमित फ़ाइलों पर एपोल

उत्तर

11

वास्तव में नहीं। epoll केवल फाइल डिस्क्रिप्टर के लिए समझ में आता है जो आमतौर पर पढ़ने/लिखने, जैसे पाइप और सॉकेट पर अवरुद्ध व्यवहार प्रदर्शित करता है। सामान्य फ़ाइल डिस्क्रिप्टर हमेशा या तो परिणाम या अंत-फ़ाइल को तुरंत कम या कम कर देंगे, इसलिए epoll उनके लिए कुछ भी उपयोगी नहीं होगा।

+2

है यही कारण है, यह काम करता है, हालांकि meaninglessly: "चुनाव() फ़ंक्शन ... नियमित रूप से फ़ाइलें हमेशा पढ़ने और लिखने के लिए सही सर्वेक्षण करेगा नियमित फ़ाइलों का समर्थन करेगा।" http://pubs.opengroup.org/onlinepubs/009695399/functions/poll.html एपोल (4) मैन पेज कहता है: "जब एक स्तर ट्रिगर इंटरफ़ेस के रूप में उपयोग किया जाता है, तो एपोल हर तरह से एक तेज मतदान (2) होता है, और जहां भी बाद का उपयोग किया जाता है, वही अर्थशास्त्र साझा करने के बाद भी इसका उपयोग किया जा सकता है। " इसलिए, जैसा कि डस्कवफ कहते हैं, यह कुछ भी उपयोगी नहीं करेगा। – mkj

+1

जो इतना मूर्ख और गलत है। डिस्क घुमावदार शेयर/ड्राइव से नेटवर्क अंतराल तक, डिस्क स्पिन अप (यदि सो जाता है) से कई कारणों से कर्नेल लटका सकता है। किसी भी तरह की डिवाइस परस्पर संपर्क आईओ लटका सकता है। किसी भी फाइल डिस्क्रिप्टर के साथ काम करने के लिए चयन/एपोल/पोल/क्यूक्यू के साथ-साथ किसी भी फ़ाइल विवरण को अवरुद्ध करने की अनुमति देनी चाहिए। – Rahly

+0

@Rahly यह संभव नहीं है। कर्नेल समय से पहले नहीं जानता है कि फाइल को लिखना होगा - सॉकेट या पाइप के विपरीत, फाइल सिस्टम लिखने के लिए बफर एक एफडी को समर्पित नहीं हैं, इसलिए गारंटी देने का कोई तरीका नहीं है कि वे एक विशिष्ट प्रक्रिया के लिए उपलब्ध होंगे । – 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