यूनिक्स में, अधिकांश वस्तुएं जिन्हें आप पढ़ और लिख सकते हैं - साधारण फाइलें, पाइप, टर्मिनल, कच्ची डिस्क ड्राइव - ये सभी फाइलों के समान हैं।
इस तरह के catअपने मानक इनपुट से एक कार्यक्रम पढ़ता है:
n = read(0, buffer, 512);
जो 512 बाइट्स के लिए पूछता है। nयदि वास्तव में कोई त्रुटि है, तो बाइट्स की संख्या, या -1 पढ़ी जाती है।
यदि आपने एक साधारण फ़ाइल के साथ बार-बार ऐसा किया है, तो आपको 512-बाइट रीड का एक गुच्छा मिलेगा, फिर फ़ाइल के टेल एंड पर कुछ कम पढ़ा जाएगा, फिर यदि आपने फाइल के पिछले हिस्से को पढ़ने की कोशिश की है। इसलिए, <= 0 catतक चलेगा n।
टर्मिनल से पढ़ना थोड़ा अलग है। आपके द्वारा पंक्ति में टाइप करने के बाद, Enterकुंजी द्वारा समाप्त किया गया , readबस उस पंक्ति को लौटाता है।
कुछ विशेष वर्ण हैं जो आप टाइप कर सकते हैं। एक है Ctrl-D। जब आप इसे टाइप करते हैं, तो ऑपरेटिंग सिस्टम उस सभी मौजूदा लाइन को भेजता है जिसे आपने टाइप किया है (लेकिन Ctrl-Dस्वयं नहीं ) रीड करने वाले प्रोग्राम में। और यहाँ गंभीर बात है: अगर Ctrl-Dलाइन पर पहला चरित्र है, तो प्रोग्राम को लंबाई 0 की एक पंक्ति भेजी जाती है - जैसे कि कार्यक्रम यह देखेगा कि क्या यह सिर्फ एक साधारण फ़ाइल के अंत में मिला है। cat अलग से कुछ भी करने की आवश्यकता नहीं है , चाहे वह एक साधारण फ़ाइल या टर्मिनल से पढ़ रहा हो।
एक और खास किरदार है Ctrl-Z। जब आप इसे टाइप करते हैं, तो एक पंक्ति में कहीं भी, ऑपरेटिंग सिस्टम उस बिंदु तक टाइप किया हुआ कुछ भी डिस्कनेक्ट करता है और प्रोग्राम में एक SIGTSTP सिग्नल भेजता है, जो सामान्य रूप से इसे रोक देता है (इसे रोक देता है) और शेल पर नियंत्रण लौटाता है।
तो आपके उदाहरण में
$ cat > file.txt
pa bam pshhh<Ctrl+Z>
[2]+ Stopped cat > file.txt
आपने कुछ वर्ण टाइप किए, जिन्हें छोड़ दिया catगया था , फिर उसकी आउटपुट फ़ाइल पर कुछ भी लिखे बिना रोक दिया गया था।
$ cat > file.txt
pa bam pshhh
<Ctrl+Z>
[2]+ Stopped cat > file.txt
आपने एक पंक्ति में टाइप किया, जिसने catअपनी आउटपुट फ़ाइल को पढ़ा और लिखा, और फिर Ctrl-Zरुका cat।