2010-09-03 13 views
5

का पठन अंत है, मैं splice का उपयोग STDIN_FILENO से फ़ाइल डिस्क्रिप्टर तक शून्य-प्रतिलिपि डेटा (जो एक नियमित फ़ाइल, चार या ब्लॉक डिवाइस, फीफो, या हो सकता है) कुछ भी जो open के साथ खोला जा सकता है)। splice का उपयोग करने के लिए, फ़ाइल डिस्क्रिप्टर या से फ़ाइल डिस्क्रिप्टर एक पाइप का उचित अंत होना चाहिए, इसलिए आमतौर पर एक पाइप एक मध्यवर्ती बफर के रूप में कार्य करने के लिए बनाया जाता है जब प्रोग्रामर डेटा से शून्य-प्रतिलिपि बनाना चाहता है गैर पाइप गैर-पाइप। हालांकि, अगर STDIN_FILENO पहले से ही एक पाइप का पढ़ा हुआ अंत है, तो मैं उस चरण को छोड़ सकता हूं और STDIN_FILENO से अन्य फ़ाइल डिस्क्रिप्टर तक सीधे विभाजित करने का प्रयास कर सकता हूं। इसलिए, मैं यह निर्धारित करने में सक्षम होना चाहूंगा कि STDIN_FILENO एक पाइप का पढ़ा हुआ अंत है या नहीं।यह निर्धारित करना कि एक पठनीय फ़ाइल डिस्क्रिप्टर एक पाइप

क्या कोई लिनक्स सिस्टम कॉल है जो निर्धारित कर सकता है कि STDIN_FILENO एक पाइप का पढ़ा हुआ अंत है?

उत्तर

5

ओपन एफडी के बारे में जानकारी प्राप्त करने के लिए, आप fstat() का उपयोग कर सकते हैं। मुझे लगता है कि परिणाम का st_mode एक पाइप के लिए S_IFIFO होना चाहिए। वैकल्पिक रूप से,/proc/self/fd/और/proc/self/fdinfo/फ़ाइल डिस्क्रिप्टर के बारे में कुछ जानकारी भी प्रदान करते हैं। ध्यान रखें कि/proc linux-specific है।

हालांकि, मुझे लगता है कि केवल splice() का उपयोग करने की कोशिश करना आसान हो सकता है और यदि यह विफल रहता है (EINVAL के साथ?) आपके जादू पर वापस आ जाता है।

+4

मैं एक परीक्षण कार्यक्रम है कि एक पाइप, 'fstat' कहा जाता है, और परीक्षण किया' S_ISFIFO' बनाते समय कोडित था के सभी को शामिल किया गया। com/ntauU2b5। नतीजा यह है कि एक पाइप के पढ़ने के अंत के लिए 'st_mode' पर' S_ISFIFO' सत्य है। आपका अनुमान सही है, और यह वास्तव में पॉज़िक्स मानक के अनुसार है: "S_ISFIFO (एम) एक पाइप ** या ** फीफो विशेष फ़ाइल के लिए टेस्ट" (http://www.opengroup.org/onlinepubs/009695399/basedefs/sys /stat.h.html) –

1

एक विकल्प के रूप में, lseek()ESPIPE के साथ विफल हो जाएगा यदि "पीडी एक पाइप, सॉकेट या फीफो से जुड़ा हुआ है।" तो नो-ऑप lseek(fd, 0, SEEK_CUR) आपको बताएगा कि फाइल डिस्क्रिप्टर इनमें से कोई है या नहीं। ।: Http: // pastebin

मेरी स्थिति में, इस मामलों मैं में रुचि

संबंधित मुद्दे