kqueue mechanism एक घटना झंडा, EV_RECEIPT
, जो जुड़ा हुआ आदमी पृष्ठ के अनुसार है:केकेई के EV_RECEIPT के लिए वास्तव में क्या है?
... किसी भी लंबित घटनाओं खर्च किए बिना एक kqueue में एक साथ परिवर्तन बनाने के लिए उपयोगी है। इनपुट के रूप में पारित होने पर, यह हमेशा लौटने के लिए
EV_ERROR
को मजबूर करता है। जब फ़िल्टर सफलतापूर्वक जोड़ा गया तो डेटा फ़ील्ड शून्य हो जाएगा।
मेरे समझ हालांकि यह है कि यह किसी भी लंबित घटनाओं, बस kevent
को nevents
पैरामीटर के लिए 0 से गुजर रहा है और इस तरह कतार से कोई इवेंट बनाकर खर्च किए बिना एक kqueue में बल्क परिवर्तन करने के लिए तुच्छ है। इसे ध्यान में रखते हुए, EV_RECEIPT
नीसमी क्यों है?
ओएस एक्स के लिए एप्पल दस्तावेज में कुछ sample code वास्तव में EV_RECEIPT उपयोग करता है:
kq = kqueue();
EV_SET(&changes, gTargetPID, EVFILT_PROC, EV_ADD | EV_RECEIPT, NOTE_EXIT, 0, NULL);
(void) kevent(kq, &changes, 1, &changes, 1, NULL);
लेकिन, changes
सरणी के रूप में kevent
कॉल के बाद जांच की कभी नहीं रही है देखकर, यह पूरी तरह से मेरे लिए स्पष्ट नहीं है क्यों EV_RECEIPT
इस मामले में इस्तेमाल किया गया था ।
EV_RECEIPT वास्तव में आवश्यक है? वास्तव में यह किस स्थिति में उपयोगी होगा?
ठीक है, यह समझ में आता है, लेकिन यह ऐप्पल उदाहरण में कोड से संबंधित नहीं है जो मैंने लिंक किया था। उस कोड में टिप्पणी कहती है: _Create kqueue और SIGCHLD के लिए इसे देखने के लिए सेट अप करें। यह सुनिश्चित करने के लिए कि हम जो उम्मीद करते हैं उसे प्राप्त करने के लिए नए-इन -10.5 EV_RECEIPT ध्वज का उपयोग करें- हालांकि, यह केवल एक ही ईवेंट के साथ 'केवेन्ट' कहता है, 'EV_RECEIPT' का उपयोग करता है, और न तो 'केवेन्ट' से वापसी और न ही मूल्यों की जांच करता है घटनाओं को वापस करें। टिप्पणी के अर्थ के अनुसार कोई भी संकेत "हम जो उम्मीद करते हैं उसे प्राप्त करते हैं"? - या इस मामले में 'EV_RECEIPT' का उपयोग फर्जी है? – davmac
मुझे लगता है कि इस मामले में, 'nevents' को शून्य पर सेट करना समान व्यवहार प्राप्त करेगा, क्योंकि वापसी मान की जांच नहीं की जाती है। लेकिन यह एक पैटर्न हो सकता है जिसे दूसरे कोड में दोहराया जाता है जहां वापसी मूल्य * चेक किया गया है। उम्मीद है कि नया फ़िल्टर वापस कर दिया गया है और * लंबित घटना नहीं *। –