कारण क्यों टीसीपी / आईपी सॉकेट उपयोग फ़ाइल वर्णनकर्ता अर्थात, जब सॉकेट इंटरफ़ेस पहले तैयार किया गया है और कार्यान्वित (गया था BSD यूनिक्स में, 1983 में ), इसके डिजाइनरों का मानना था कि एक नेटवर्क कनेक्शन एक फ़ाइल के अनुरूप था - आप कर सकते हैं read
, write
और close
दोनों , और यह कि "सब कुछ एक फ़ाइल है" के यूनिक्स विचार के साथ अच्छी तरह से फिट होगा।
अन्य टीसीपी / आईपी नेटवर्क स्टैक कार्यान्वयन अपने ओएस की फ़ाइल- I / O सबसिस्टम के साथ एकीकृत नहीं थे, उदाहरण के लिए MacTCP । लेकिन क्योंकि BSD सॉकेट इंटरफ़ेस बहुत लोकप्रिय था, यहां तक कि इन अन्य कार्यान्वयनों ने अपने यूनिक्स जैसे कार्यों के साथ सॉकेट एपीआई को दोहराने के लिए चुना, इसलिए आपको "फाइल डिस्क्रिप्टर" मिला, जो केवल टीसीपी / आईपी संचार के लिए उपयोग किया जाता था, सिस्टम पर जो अन्यथा नहीं हुआ फ़ाइल विवरणक हैं।
आपके प्रश्न का दूसरा भाग एक सीमा क्यों है? ऐसा इसलिए है क्योंकि फ़ाइल डिस्क्रिप्टर लुकअप टेबल को लागू करने का सबसे तेज़ तरीका एक सरणी के साथ है। ऐतिहासिक रूप से, सीमा को कर्नेल में हार्ड-कोड किया गया था।
यहां यूनिक्स रिलीज़ 7 (1979) में एक हार्ड-कोडित सीमा 20 फाइल डिस्क्रिप्टर प्रति प्रक्रिया के साथ कोड है:
- user.h :
struct file *u_ofile[NOFILE]
- परम.ह :
#define NOFILE 20
तुलना करके, लिनक्स गतिशील रूप से एक प्रक्रिया की फाइल डिस्क्रिप्टर तालिका के लिए स्थान आवंटित करता है। पूर्ण सीमा 8192 तक सीमित होती है, लेकिन आप इसे अपनी पसंद के अनुसार सेट कर सकते हैं। मेरी प्रणाली 191072 को सूचीबद्ध करती है /proc/sys/fs/file-max
।
लिनक्स में कोई भी पूर्ण सीमा नहीं होने के बावजूद, फिर भी हम कार्यक्रमों को पागल नहीं होने देना चाहते हैं, इसलिए व्यवस्थापक (या वितरण पैकेज) आम तौर पर संसाधन सीमा निर्धारित करते हैं। देख लो /etc/security/limits.conf
, या चलाओ ulimit -n
।