[Powered by Google Translate] टॉमी: इस वीडियो में, हम के बारे में सीख जाओगे
पुनः निर्देशित कर और पाइप.
अब तक, हम कार्यों का उपयोग कर रहा है की तरह printf
टर्मिनल के लिए उत्पादन डेटा और GetString की तरह कार्य करता है
उपयोगकर्ता इनपुट हमारे लिए प्रदान करने की अनुमति
कीबोर्ड का उपयोग कर कार्यक्रम.
चलो जल्दी से एक प्रोग्राम है कि हो जाता है की एक पंक्ति पर एक नज़र रखना
उपयोगकर्ता से इनपुट और फिर यह outputs.
>> 7 लाइन पर, हम एक स्ट्रिंग के लिए उपयोगकर्ता उत्साह रहे हैं, और
फिर 8 लाइन पर, हम मुद्रण कर रहे हैं वापस बाहर.
चलो संकलन और हमारे कार्यक्रम चला.
बढ़िया है.
स्ट्रिंग हम प्रदान वापस गूँजती थी
हमें टर्मिनल पर.
ऐसा इसलिए हुआ क्योंकि printf समारोह करने के लिए लिखा था
धारा मानक बाहर कहा जाता है, या एस - टी - घ बाहर.
जब कुछ stdout के लिए लिखा है, यह डिफ़ॉल्ट रूप से है
टर्मिनल द्वारा प्रदर्शित किया जाता है.
>> तो यह है कि अगर सब ठीक है और अच्छा है, लेकिन क्या है, बजाय बस
स्ट्रिंग प्रदर्शित करने, हम यह एक फ़ाइल को बचाने के लिए करना चाहता था?
उदाहरण के लिए, हम को याद रखना चाहते हो सकता है कि क्या वास्तव में हमारे
कार्यक्रम किया जब हम इसे एक विशेष इनपुट दिया बाद में.
एक दृष्टिकोण के लिए हमारे सी कार्यक्रम में ऐसा करते हैं, का उपयोग किया जाएगा
फाइल करने के लिए लिखने के लिए कुछ विशेष कार्य है कि हम करेंगे
एक अन्य वीडियो में देखें.
आसान भी है, हालांकि, किसी भी तरह से होगा
एक फाइल करने के लिए stdout अनुप्रेषित.
इस तरह, जब printf stdout के लिए लिखते हैं, सामग्री होगा
एक फ़ाइल के बजाय लिखित
टर्मिनल द्वारा प्रदर्शित किया जाता है.
हम सिर्फ इतना है कि अधिक से अधिक एक संकेत जोड़कर कर सकते हैं पीछा किया,
एक फ़ाइल नाम से आदेश के लिए हम हमारे कार्यक्रम पर अमल करने के लिए उपयोग.
>> तो, के बजाय सिर्फ निष्पादित. / अनुप्रेषित, हम कर सकते हैं
चलाते हैं. / अनुप्रेषित, हस्ताक्षर की तुलना में एक अधिक से पीछा किया, बाद से
file.txt तरह फ़ाइल नाम,.
चलो देखते हैं कि क्या होता है.
ठीक है.
सूचना है कि इस समय कुछ भी नहीं टर्मिनल पर प्रदर्शित किया गया था,
लेकिन हम हमारे की सामग्री को संशोधित नहीं किया
सी कार्यक्रम.
चलो अब रास के साथ इस निर्देशिका की सामग्री की जांच.
>> सही सभी.
अब हम हमारी निर्देशिका में एक नई फ़ाइल file.txt बुलाया है,
जो फ़ाइल नाम हम आपूर्ति जब हम अपने भाग गया है
कार्यक्रम पुनर्निर्देशन.
चलो ऊपर file.txt खुला.
और यहाँ, हम देख सकते हैं कि stdout अनुप्रेषित के बाहर था
file.txt नामक एक फाइल करने के लिए लिखा है.
तो चलो पिछले आदेश को फिर से चलाने के लिए, लेकिन एक कंपनी की आपूर्ति
विभिन्न इनपुट इस समय.
ठीक है.
चलो file.txt पर एक नज़र अब ले.
>> हम यहाँ देखने के लिए कि फ़ाइल अधिलेखित किया गया है सकते हैं, तो हमारे
मूल इनपुट वहाँ नहीं है.
इसके बजाय अगर हम इस फाइल संलग्न करना चाहते हैं, नया डाल
इनपुट फ़ाइल के मौजूदा सामग्री के नीचे, हम कर सकते हैं
सिर्फ एक के दो अधिक से अधिक लक्षण के बजाय का उपयोग करें.
चलो की कोशिश है कि.
अब, अगर हम file.txt फिर से खोलने, हम हमारे दोनों के देख सकते हैं
इनपुट लाइनों.
कुछ मामलों में, हम किसी को छोड़ना चाहते हैं हो सकता है
हमारे कार्यक्रम के उत्पादन.
बल्कि एक फाइल करने के लिए उत्पादन में लिखने और फिर को हटाने से
फ़ाइल जब हम इसके साथ कर रहे हैं, हम एक विशेष के लिए लिख सकते हैं
/ dev / null फ़ाइल कहा जाता है.
जब कुछ / लिखा है dev/null--
या कम करने के लिए सिर्फ devnull -
यह स्वचालित रूप से खारिज कर दिया है.
तो अपने डेटा के लिए एक काला छेद रूप में devnull के बारे में सोचना.
>> तो अब हम देखा है कि कैसे की तुलना में अधिक से अधिक संकेत अनुप्रेषित कर सकते हैं
stdout, चलो देखते हैं कैसे हम में मानक अनुप्रेषित कर सकते हैं -
या एस - टी - घ में -
stdout के अनुरूप.
हालांकि कार्यों की तरह printf बुलाया धारा लिखने
stdout GetString, और इसी तरह के कार्यों के धारा से पढ़ा
stdin कहा जाता है, जो डिफ़ॉल्ट रूप से, की धारा
अक्षर कुंजीपटल पर टाइप.
हम कम से कम चिह्न का उपयोग कर stdin पुनर्निर्देशित कर सकते हैं पीछा किया,
एक फ़ाइल नाम से.
अब, बजाय उपयोगकर्ता इनपुट के लिए उत्साह
टर्मिनल, एक प्रोग्राम फ़ाइल को खोलने के हम निर्दिष्ट होगा और का उपयोग करें
इनपुट के रूप में अपनी लाइनों.
>> चलो देखते हैं कि क्या होता है.
बढ़िया है.
file.txt की पहली पंक्ति टर्मिनल में मुद्रित किया गया
है क्योंकि हम GetString एक बार बुला रहे हैं.
यदि हम हमारे कार्यक्रम में GetString करने के लिए एक और फोन किया था,
file.txt की अगली पंक्ति के रूप में इस्तेमाल किया गया होगा
है कि कॉल करने के लिए इनपुट.
फिर, हम अपने सी कार्यक्रम में नहीं संशोधित किया है.
हम केवल बदल रहे हैं कि कैसे हम इसे चलाने के.
और यह भी याद है, हम stdout इस समय पुनर्निर्देशित नहीं किया है,
तो कार्यक्रम के उत्पादन में अभी भी था
टर्मिनल पर प्रदर्शित होता है.
हम, ज़ाहिर है, दोनों stdin पुनर्निर्देशित कर सकते हैं
stdout और इस तरह से.
अब, file2.txt file.txt की पहली पंक्ति में शामिल है.
>> तो, इन ऑपरेटरों का उपयोग कर, हम पढ़ने के लिए और करने में सक्षम किया गया है
पाठ फ़ाइलों से लिखने के लिए.
अब, चलो देखते हैं कि हम के रूप में एक कार्यक्रम के उत्पादन का उपयोग कर सकते हैं
एक अन्य कार्यक्रम में इनपुट.
तो यहाँ एक साधारण सी कार्यक्रम मैं
यहाँ hello.c कहा जाता है.
जैसा कि आप देख सकते हैं, यह सिर्फ outputs "हाय
वहाँ उपयोगकर्ता के लिए ".
अगर मैं करने के लिए निवेश के रूप में नमस्ते के उत्पादन का उपयोग करें पुनर्निर्देशित करना चाहते हैं -
एक और कार्यक्रम -
मैं पहली बार एक फाइल करने के लिए हैलो की stdout अनुप्रेषित सकता
input.txt, तो है कि एक ही अनुप्रेषित की stdin अनुप्रेषित
फाइल input.txt.
तो मैं / हैलो input.txt> कर सकते हैं.
इस पर अमल के लिए Enter दबाएं.
द्वारा पीछा किया. / अनुप्रेषित <
, input.txt और निष्पादित.
तो हम एक सेमीकोलन के साथ यह थोड़ा कम कर सकते हैं, जो की अनुमति देता है
हमें एक ही लाइन पर दो या दो से अधिक कमांड चलाने के लिए.
इसलिए मैं कह सकता है. / नमस्ते> input.txt, अर्धविराम,
/ <Input.txt अनुप्रेषित.
>> तो यह काम करता है, लेकिन यह अभी भी सुंदर असजीला लगता है.
मेरा मतलब है, क्या हम वास्तव में है कि इस मध्यस्थ पाठ फ़ाइल की जरूरत है
अब रन अनुप्रेषित के बाद आवश्यक है?
सौभाग्य से, हम इस अतिरिक्त पाठ का उपयोग क्या है फ़ाइल से बचने कर सकते हैं
एक पाइप बुलाया.
अगर मैं कहता हूँ, / हैलो. / अनुप्रेषित, तो की stdout
बाईं तरफ कार्यक्रम -
इस मामले में, हैलो -
के लिए मानक इनपुट के रूप में इस्तेमाल किया जाएगा
सही पर कार्यक्रम.
इस मामले में, अनुप्रेषित. तो चलो इस चलाने के.
>> हम वहाँ जाते हैं.
हम जानते हैं कि हैलो के उत्पादन में इस्तेमाल किया गया था इनपुट के रूप में देख सकते हैं
अनुप्रेषित के लिए.
आज्ञाओं एक साथ stringing पाइप का प्रयोग करके, हम फार्म क्या है
एक पाइप लाइन कहा जाता है, के बाद से हमारे उत्पादन में अनिवार्य रूप से बढ़ रहा है
आदेशों की एक दृश्य के माध्यम से.
पाइप का उपयोग करना है, हम को ज़रूरत के बिना कुछ अच्छा सामान कर सकते हैं
किसी भी कोड सब पर लिखने के.
उदाहरण के लिए, हम कहते हैं कि हम कितने फ़ाइलें हैं करना चाहते हैं
इस निर्देशिका के अंदर.
एक पाइप का उपयोग करना, हम WC के साथ रास कमान गठबंधन कर सकते हैं -
wordcount या -
आदेश.
रास के लिए stdout निर्देशिका में प्रत्येक फ़ाइल उत्पादन होगा, और
wc हमें बताओ कितने लाइनों stdin के माध्यम से इसे करने के लिए दिया गया.
तो, अगर हम कहते हैं ls | wc-l -
wc-l झंडा की आपूर्ति करने के लिए यह बताने के लिए पंक्तियों की गणना
हम देख सकते हैं कि वास्तव में कितने फ़ाइलें हैं
मौजूदा निर्देशिका में.
>> तो चलो एक और उदाहरण पर एक नज़र रखना.
मैं यहाँ एक students.txt नामक एक फाइल है,
नामों की एक सूची के साथ.
हालांकि, यह सब किसी भी क्रम में इन नामों को नहीं कर रहे हैं और ऐसा लगता है
जैसे कुछ नाम दोहराया जाता है.
क्या हम चाहते हैं वर्णमाला में अद्वितीय नामों की एक सूची है
आदेश, एक final.txt नामक एक फाइल को बचाया.
हम, ज़ाहिर है, हमारे लिए यह करने के लिए एक सी कार्यक्रम लिख सकता है.
लेकिन यह करने के लिए अनावश्यक रूप से हो रहा है
बहुत जल्दी जटिल है.
चलो बजाय पाइप और कुछ अंतर्निहित उपकरण का उपयोग को हल करने के लिए
इस समस्या.
>> पहली बात तो हम क्या करने की जरूरत है फ़ाइल students.txt पढ़ा है.
बिल्ली आदेश सिर्फ इतना है कि क्या करेंगे.
यह निर्दिष्ट फ़ाइल में पढ़ने और लिखने जाएगा
stdout के लिए अपनी सामग्री.
बाद हम पाठ फ़ाइल पढ़ा है, हम करेंगे
नामों को छांटने के लिए करना चाहते हैं.
तरह आदेश हमारे लिए इस संभाल कर सकते हैं.
क्रमबद्ध करें stdout के लिए stdin के माध्यम से आपूर्ति की लाइन उत्पादन होगा
क्रमबद्ध क्रम में.
आदेश में students.txt की सामग्री की आपूर्ति करने के लिए
stdin तरह है, हम एक पाइप का उपयोग करने के लिए बिल्ली और तरह का गठबंधन सकता है.
सॉर्ट और | तो मैं बिल्ली students.txt पर अमल कर सकते हैं
प्रेस दर्ज करें.
और अब, हम में students.txt की सामग्री को देखने
वर्णमाला क्रम.
>> तो चलो एक और कमांड जोड़ -
uniq, या अद्वितीय -
हमारे पाइप लाइन.
जैसा कि आप अनुमान लगा सकता है, uniq, जब एक हल के अनुक्रम की आपूर्ति
stdin के माध्यम से लाइनों, अद्वितीय लाइनों उत्पादन होगा.
तो अब हम बिल्ली students.txt
तरह | | uniq.
अंत में, हम एक पाइपलाइन के उत्पादन को बचाने कर सकते हैं
तरह | | uniq बिल्ली students.txt माध्यम से फाइल
> Final.txt.
तो, अगर हम final.txt खोलते हैं, हम वास्तव में हम क्या थे
के लिए देख रहे हैं:
वर्णमाला क्रम में अद्वितीय नामों की एक सूची है,
एक पाठ फ़ाइल को बचाया.
वैसे, हम भी कहा है तरह <
students.txt | बिल्कुल uniq> final.txt करने के लिए
एक ही बात है, हम ऑपरेटरों में देखा है में से प्रत्येक का उपयोग
इस वीडियो.
>> मेरा नाम टॉमी है, और इस CS50 है.