2011-10-13 6 views
6

लिनक्स बॉक्स में, मेरे पास एक नामित पाइप को लिखने वाली कुछ प्रक्रियाएं हैं और दूसरा इसे पढ़ रहा है। मुझे संदेह है कि मेरा पाठक नहीं रख रहा है और पाइप में बहुत सारे डेटा कतारबद्ध हैं।यह देखने के लिए कि नामित पाइप में कितना डेटा कतारबद्ध है?

क्या कोई मुझे बता सकता है कि, यह देखने का कोई तरीका है कि पाइप में कितना डेटा कतारबद्ध है? कोई लिनक्स कमांड या सी एपीआई?

आपके समय के लिए धन्यवाद।

--KS

उत्तर

1

मुझे नहीं लगता कि के रूप में FIONREAD जो i_size के रूप में आईनोड में संग्रहीत किया जाता मूल्य i_size_read द्वारा लौटाए से निर्धारित होता है FIONREAD काम करेंगे है। i_size का उपयोग पाइप के साथ नहीं किया जाता है (यही कारण है कि स्टेट हमेशा पाइप के आकार के लिए 0 लौटाती है)।

http://lxr.free-electrons.com/source/include/linux/fs.h#L848

यह बफ़र्स (i_node.i_pipe.bufs) के लेन संपत्ति संक्षेप द्वारा आकार पाने के लिए संभव हो जाना चाहिए। ऐसा लगता है कि इस मान को स्टेट या ioctl द्वारा उजागर नहीं किया गया है। यह से डेटा (ताकि अगले पढ़ने के एक ही डेटा वापसी होगी) को हटाए बिना इस पाइप से पढ़ना चाहिए -

https://github.com/mirrors/linux-2.6/blob/master/fs/pipe.c

0

आप recv (..., MSG_PEEK) की कोशिश कर सकते। यह आपको आवश्यक कुछ डेटा के बारे में जरूरी नहीं बताएगा, बस इसमें से कुछ।

+0

क्या recv() गैर-सॉकेट फ़ाइलों पर काम करता है? – bdonlan

+0

तो, सामान्य रूप से पाइप से पढ़ा गया डेटा हटा दिया जाएगा? – Chaitanya

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