2017-02-16 10 views
8

मैं इसे man cat (जीएनयू/लिनक्स) में मिला।
मैनुअल बस बताए बिना -u (ignored) कहता है।
जिज्ञासा से मैंने Google पर खोज की लेकिन ऐसा लगता है कि इससे पहले कोई भी यह नहीं पूछा था।
फिर मैंने के other implementations पर देखा।
मैंने देखा ऐप्पल की बिल्ली भी इस विकल्प को लागू करती है (cat.c देखें)। स्रोत कोड में यहबिल्ली कमांड में "-u" विकल्प का उपयोग क्या है?

... 
case 'u': 
    setbuf(stdout, NULL); 
    break; 
... 

मुझे लगता है कि इस विकल्प का अर्थ 'unbuffered' है। इस विकल्प का अंतर्निहित उपयोग क्या है? यह क्यों है और इसे क्यों नजरअंदाज किया जाता है? मुझे लगता है कि इसके लिए कुछ कारण होना चाहिए।

+1

यदि आप विकल्प के वास्तविक उपयोग के बारे में जानकारी चाहते हैं, तो आपको एसओ के बजाय 'सुपर यूज़र' या 'यूनिक्स और लिनक्स' स्टैक एक्सचेंज वेबसाइटों पर अधिक भाग्य हो सकता है। – AntonH

+0

[शायद यह देखकर कि 'सेटबफ' क्या मदद करेगा] (http://en.cppreference.com/w/c/io/setbuf)। – WhozCraig

+0

मुझे लगता है कि इसका मतलब है 'unbuffered' – hek2mgl

उत्तर

6

विकल्प -ustdout को बफरिंग अक्षम करता है।

जीएनयू प्रलेखन पढ़ता है: stdout के लिए

उपयोग unbuffered आई/ओ। Posix इस विकल्प के बिना व्यवहार निर्दिष्ट नहीं करता है।

जो शायद यह इंगित कर रहा है कि cat का वर्तमान डिफ़ॉल्ट व्यवहार बफरिंग के बिना आउटपुट करना है।

4

यह यूनिक्स/लिनक्स के लिए एक पॉज़िक्स अनुपालन विकल्प है। जीएनयू cat यह स्वचालित रूप से करता है और इसे बंद करने का कोई तरीका नहीं है। जब निर्दिष्ट, इसे स्वीकार कर लिया लेकिन ध्यान नहीं दिया, क्योंकि यह व्यवहार पर कोई प्रभाव नहीं है।

अधिक जानकारी cat(1): प्रत्येक के रूप में देरी के बिना मानक आउटपुट में इनपुट फ़ाइल से

-u लिखें बाइट्स पढ़ा जाता है।

7

cat -u के पीछे विचार यह वास्तव में है कि उत्पादन, unbuffered होना चाहिए ताकि भले ही cat एक पाइप लाइन में है, डेटा तुरंत लिखा जाएगा के रूप में पढ़ रहा है।

यह बात है जब आप वास्तव में cat -u "[email protected]" | … का उपयोग करें और इनपुट है, एक कीबोर्ड से आ सकते हैं।

संभावना है कि जीएनयू cat प्रभावी रूप से बफरिंग (प्रत्यक्ष read() और write() कॉल का उपयोग) के बिना काम करता है, इसलिए -u विकल्प अप्रासंगिक है - यह हमेशा 'unbuffered मोड' में काम करता है।

9

प्रति the POSIX standard for cat:

SYNOPSIS

cat [-u] [file...] 

...

विकल्प

...

निम्नलिखित विकल्प का समर्थन किया जाएगा: मानक आउटपुट में इनपुट फ़ाइल से

-u लिखें बाइट्स बिना किसी देरी के रूप में प्रत्येक पढ़ा जाता है।

जिसे आउटपुट पर बफरिंग अक्षम करके कार्यान्वित किया जा सकता है।

2

-u विकल्प FIFOs से गैर-अवरुद्ध पढ़ने प्रोटोटाइप में मूल्य है। आशय समर्थन के लिए निम्न अनुक्रम है:

mkfifo foo>
बिल्ली -u foo>/dev/tty13 &
बिल्ली -u> foo

यह अनिर्दिष्ट मानक आउटपुट है कि क्या है या डिफ़ॉल्ट मामले में buffered नहीं है। यह कभी-कभी रुचि का होता है जब मानक आउटपुट टर्मिनल से जुड़ा होता है, क्योंकि बफर- आईएनजी आउटपुट में देरी कर सकता है। -यू विकल्प की उपस्थिति गारंटी देता है कि unbuffered I/O उपलब्ध है। यह क्रियान्वयन-परिभाषित किया गया है कि क्या बिल्ली उपयोगिता बफर आउटपुट करती है अगर -विकल्प निर्दिष्ट नहीं है। परंपरागत रूप से, -यू विकल्प आईईईई स्टडी 1003.1-2001 की सिस्टम इंटरफेस वॉल्यूम में परिभाषित setvbuf() फ़ंक्शन के बराबर का उपयोग करके लागू किया गया है।

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