स्टडआउट बफ़रिंग को हटाने के लिए `unbuffer` या` stdbuf`?


13

क्या अनबफर (1) और stdbuf (1) के बीच अंतर है? मैं जो इकट्ठा करता हूं, उसमें से unbuffer शुरुआत में libc function set (X) buf को कॉल करने के "सर्वश्रेष्ठ प्रयास" से अधिक बनाता है, और फिर चीजों को होने देता है?

जवाबों:


14

वे पूरी तरह से अलग तरीके से काम करते हैं।

प्रोग्राम अनबफ़र नाम कमांड चलाने की अपेक्षा करता है। क्योंकि उम्मीद है कि बच्चे की प्रक्रिया की गति को रोकने के लिए एक छद्म टीटी बनाता है, बच्चे को यह सोचकर बेवकूफ बनाया जा सकता है कि उसे ब्लॉक-बफ़रिंग के बजाय लाइन-बफ़रिंग का उपयोग करना चाहिए। कुछ कार्यक्रम अपने व्यवहार को बदल देंगे जब isatty (stdout) सच है, अन्य नहीं करेंगे और यह जानना बहुत कठिन है कि कौन सा होगा और कौन सा नहीं।

कार्यक्रम stdbuf गतिशील रूप से भरी हुई बायनेरिज़ के लिए libstdbuf को libc के सामने रखने का प्रयास करता है। जहाँ libstdbuf libdddd कॉल की डिफ़ॉल्ट बफरिंग रणनीति को फिर से परिभाषित करता है।

मुझे यह पता चला

 apt-get source expect coreutils

और प्रत्येक कार्यक्रम के लिए प्रासंगिक स्रोत पढ़ना।


कुछ चिंताजनक सामान (मैनपेज से): unbuffer -pयदि कोई प्रक्रिया अनबफर करने के लिए इनपुट फीड करती है तो गलत तरीके से काम कर सकती है। विचार करें: process1 | unbuffer -p process2 | process3यदि process1 बाहर निकलता है, तो process2 अभी तक समाप्त नहीं हुआ है। प्रतीक्षा करने के लिए लंबे समय तक जानना असंभव है
dan3

ऐसा लगता है कि stdbuf C स्ट्रीम का उपयोग करने वाले कार्यक्रमों के स्टड बफरिंग को भी नियंत्रित कर सकता है, जो महत्वपूर्ण लगता है। शायद इसे भविष्य के पाठकों के लाभ के लिए उत्तर में शामिल किया जाना चाहिए।
dan3
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.