अन्य उत्तरों में बढ़िया चीजें शामिल हैं। मैं सिर्फ अपने 2 सेंट जोड़ूंगा।
विकिपीडिया के अनुसार हम निश्चित रूप से जानते हैं: एक फाइल डिस्क्रिप्टर एक गैर-नकारात्मक पूर्णांक है। मुझे लगता है कि सबसे महत्वपूर्ण बात याद आ रही है:
फ़ाइल डिस्क्रिप्टर एक प्रोसेस आईडी से बंधे हैं।
हम जानते हैं कि सबसे प्रसिद्ध फाइल डिस्क्रिप्टर 0, 1 और 2 हैं। 0 STDIN
, 1 STDOUT
, टू , और 2 टू से मेल खाता है STDERR
।
कहो, शेल प्रक्रियाओं को एक उदाहरण के रूप में लें और यह इसके लिए कैसे लागू होता है?
इस कोड को देखें
#>sleep 1000 &
[12] 14726
हमने आईडी 14726 (पीआईडी) के साथ एक प्रक्रिया बनाई। का उपयोग करते हुए lsof -p 14726
हम इस तरह बातें कर सकते हैं:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sleep 14726 root cwd DIR 8,1 4096 1201140 /home/x
sleep 14726 root rtd DIR 8,1 4096 2 /
sleep 14726 root txt REG 8,1 35000 786587 /bin/sleep
sleep 14726 root mem REG 8,1 11864720 1186503 /usr/lib/locale/locale-archive
sleep 14726 root mem REG 8,1 2030544 137184 /lib/x86_64-linux-gnu/libc-2.27.so
sleep 14726 root mem REG 8,1 170960 137156 /lib/x86_64-linux-gnu/ld-2.27.so
sleep 14726 root 0u CHR 136,6 0t0 9 /dev/pts/6
sleep 14726 root 1u CHR 136,6 0t0 9 /dev/pts/6
sleep 14726 root 2u CHR 136,6 0t0 9 /dev/pts/6
4-वें कॉलम की FD और बहुत अगला कॉलम TYPE, फाइल डिस्क्रिप्टर और फाइल डिस्क्रिप्टर टाइप के अनुरूप है।
एफडी के लिए कुछ मूल्य हो सकते हैं:
cwd – Current Working Directory
txt – Text file
mem – Memory mapped file
mmap – Memory mapped device
लेकिन वास्तविक फ़ाइल विवरणक निम्नानुसार है:
NUMBER – Represent the actual file descriptor.
संख्या के बाद का चरित्र "1u", उस मोड का प्रतिनिधित्व करता है जिसमें फ़ाइल खोली जाती है। पढ़ने के लिए r, लिखने के लिए w, पढ़ने और लिखने के लिए यू।
टाइप फ़ाइल के प्रकार को निर्दिष्ट करता है। TYPE के कुछ मान इस प्रकार हैं:
REG – Regular File
DIR – Directory
FIFO – First In First Out
लेकिन सभी फाइल डिस्क्रिप्टर सीएचआर हैं - कैरेक्टर स्पेशल फाइल (या कैरेक्टर डिवाइस फाइल)
अब, हम फ़ाइल डिस्क्रिप्टर्स की पहचान कर सकते हैं STDIN
, STDOUT
और STDERR
आसान के साथ lsof -p PID
, या हम देख सकते हैं यदि हम ls /proc/PID/fd
।
ध्यान दें कि फ़ाइल डिस्क्रिप्टर तालिका जो कर्नेल को ट्रैक करती है, वह फ़ाइल टेबल या इनसाइड टेबल के समान नहीं है। ये अलग हैं, जैसा कि कुछ अन्य जवाबों में समझाया गया है।
आप अपने आप से पूछ सकते हैं कि ये फ़ाइल वर्णनकर्ता भौतिक रूप से कहां हैं और /dev/pts/6
उदाहरण के लिए क्या संग्रहीत है
sleep 14726 root 0u CHR 136,6 0t0 9 /dev/pts/6
sleep 14726 root 1u CHR 136,6 0t0 9 /dev/pts/6
sleep 14726 root 2u CHR 136,6 0t0 9 /dev/pts/6
ठीक है, /dev/pts/6
विशुद्ध रूप से स्मृति में रहता है। ये नियमित फाइलें नहीं हैं, लेकिन तथाकथित चरित्र डिवाइस फाइलें हैं । आप इसके साथ जांच कर सकते हैं: ls -l /dev/pts/6
और वे c
मेरे मामले में शुरू करेंगे crw--w----
।
बस सबसे लिनक्स को याद करने के लिए जैसे ओएस सात प्रकार की फाइलों को परिभाषित करता है:
- नियमित फाइलें
- निर्देशिकाएँ
- चरित्र डिवाइस फ़ाइलें
- डिवाइस फ़ाइलों को ब्लॉक करें
- स्थानीय डोमेन सॉकेट
- नामित पाइप (FIFOs) और
- प्रतीकात्मक लिंक