C . में लिखें सिस्टम कॉल का उपयोग कैसे करें

How Use Write System Call C



सिस्टम कॉल प्रोग्राम और लिनक्स ऑपरेटिंग सिस्टम कर्नेल के बीच प्राथमिक गेटवे के रूप में कार्य करता है। यद्यपि आपको अपने सी प्रोग्रामिंग करियर में लगभग निश्चित रूप से सिस्टम कॉल की आवश्यकता होगी, चाहे आप असाधारण उत्पादकता या फीचर की एक निश्चित शैली का लक्ष्य रखते हों, लोकप्रिय लिनक्स डिस्ट्रो में पाए जाने वाले ग्लिब रिपोजिटरी या अन्य मानक पुस्तकालय आपके विशाल बहुमत के लिए पर्याप्त होंगे आवश्यकताएं। इस गाइड में, हम C भाषा में राइट सिस्टम कॉल के बारे में एक अवधारणा स्थापित करेंगे।

वाक्य - विन्यास:

#शामिल

ssize_tलिखो(इंट एफडी, कॉन्स्ट शून्य*बफ, size_t गिनती);

इस उपरोक्त सिंटैक्स में, पहली पंक्ति सिस्टम कॉल के लिए लाइब्रेरी दिखाती है। दूसरी पंक्ति में, fd एक फ़ाइल डिस्क्रिप्टर के लिए खड़ा है जो वास्तव में एक संख्या है जो एक प्रक्रिया की खुली फ़ाइल को निर्दिष्ट करती है। कीवर्ड *buf बफर के लिए है। इसमें कोई भी डेटा शामिल है। अगला गिनती है। यह बफ़र से फ़ाइल डिस्क्रिप्टर को लिखे जाने वाले बाइट्स की संख्या है।







पूर्वापेक्षाएँ स्थापित करें:

किसी भी सी भाषा कोड को चलाने के लिए, आपको पहले लिनक्स वितरण में कुछ पैकेज स्थापित करने होंगे। यदि आप राइट सिस्टम कॉल के बारे में अधिक जानकारी देखना चाहते हैं, तो आपको ऐसा करने के लिए मैनपेज-देव पैकेज स्थापित करना होगा। Ctrl+Alt+T शॉर्टकट कुंजी का उपयोग करके टर्मिनल खोलने के लिए। इसे खोलने के बाद, मैनपेजों को स्थापित करने के लिए नीचे दिए गए उपयुक्त इंस्टाल कमांड के बाद मैनपेज-देव कीवर्ड लिखें।



$सुडोउपयुक्तइंस्टॉलमैनपेज-देव



मैनपेज स्थापित करने में कुछ समय लगेगा। इसके पूरा होने की प्रतीक्षा करें।





स्थापना के बाद, आप शेल में नीचे दिए गए मैन कमांड के माध्यम से राइट सिस्टम कॉल के बारे में अतिरिक्त जानकारी देख सकते हैं।



$पुरुष 2 लिखो

राइट कमांड के लिए आउटपुट मैन पेज नीचे दिया गया है। आप इसके बारे में जानकारी पढ़ सकते हैं। मैनुअल से बाहर निकलने के लिए q दबाएं।

अब सी भाषा में काम करने के लिए अपने लिनक्स सिस्टम में जीसीसी पैकेज स्थापित करने का समय आ गया है। उसके लिए, शेल खोलें और नीचे दिए गए apt install कमांड के बाद कीवर्ड gcc लिखें।

$सुडोउपयुक्तइंस्टॉल जीसीसी

इस बीच, संस्थापन के दौरान, यह आपको जारी रखने के लिए y और इसे रोकने के लिए n दबाकर संस्थापन की इस क्रिया की पुष्टि करने के लिए कह सकता है। तो, y की को टैप करें और एंटर की को हिट करें।

यह आपके सिस्टम में कुछ मिनटों में स्थापित हो जाएगा, और आउटपुट की अंतिम पंक्तियाँ नीचे स्नैपशॉट में दर्शाई गई होंगी।

उदाहरण:

आइए हमारे लिनक्स वितरण में एक राइट सिस्टम कॉल के कुछ उदाहरण हैं। इसलिए, कमांड-लाइन शेल खोलें और इसमें डॉट सी एक्सटेंशन के साथ एक नई सी फाइल बनाएं। इसे जल्दी से बनाने और खोलने के लिए आपको नीचे दिए गए नैनो कमांड का उपयोग करना होगा। हमने इसे नया नाम दिया है।

$नैनोnew.c

नीचे की विंडो खुल जाएगी। अब आपको इस फाइल में चिपका हुआ कोड लिखना है। इस कोड में, हमने पहले एक unistd.h लाइब्रेरी को शामिल किया है। फिर हमने मुख्य फ़ंक्शन बनाया है, और इस फ़ंक्शन के भीतर, हमने एक राइट सिस्टम कॉल बनाया है। इस सिस्टम कॉल में, फ़ाइल डिस्क्रिप्टर सबसे पहला पैरामीटर है। इस मामले में, पूर्णांक 1 आउटपुट डिवाइस स्क्रीन का प्रतिनिधित्व करता है, और यह निश्चित है। तो हमारा आउटपुट स्क्रीन पर दिखाया जाएगा। दूसरा पैरामीटर बफर डेटा दिखाता है। आप इसमें कुछ भी जोड़ सकते हैं। और अंतिम पैरामीटर बफर पैरामीटर में दिए गए डेटा के लिए गिनती संख्या दिखाता है। जैसा कि हमने 5 को गिनती संख्या के रूप में उल्लेख किया है, यह केवल बफर डेटा के पहले 5 बाइट्स दिखाएगा और शेष बाइट्स को अनदेखा करेगा। इस कोड को Ctrl+S शॉर्टकट कुंजी का उपयोग करके सहेजें और Ctrl+X कमांड का उपयोग करके इस फ़ाइल से बाहर निकलें।

#शामिल

मुख्य प्रवेश बिंदु()

{लिखना(1अक्सा यासीन5);}

अब टर्मिनल में, इस नए बनाए गए कोड को फ़ाइल नाम के साथ संकलित करने के लिए नीचे दिए गए gcc कमांड को आज़माएं।

$जीसीसीnew.c

आइए रन टाइम पर बनाई गई डिफ़ॉल्ट a.out फ़ाइल का उपयोग करके इस कोड को देखें। इसलिए, राइट सिस्टम कॉल के आउटपुट की जांच करने के लिए नीचे दिए गए a.out कमांड को आज़माएं। वर्तमान निर्देशिका से फ़ाइल चुनने के लिए हमें इसका उपयोग ./ के साथ करना होगा।

$./ए.आउट

आप जो आउटपुट देख सकते हैं उसने केवल संख्या 5 की वजह से अक्सा शब्द प्रदर्शित किया है।

आइए हमारे कोड को थोड़ा बदल दें। हमने गिनती संख्या को 11 में बदल दिया है क्योंकि हमारे बफर डेटा अक्सा यासीन में कुल 11 बाइट्स हैं। तो इस बार, आउटपुट स्ट्रिंग डेटा अक्सा यासीन के पूरे बाइट्स दिखाएगा। इस फ़ाइल को Ctrl+S का उपयोग करके सहेजें और Ctrl+X शॉर्टकट कुंजी का उपयोग करके इसे छोड़ दें।

आइए लिनक्स वितरण के लिए नए स्थापित जीसीसी कंपाइलर का उपयोग करके अद्यतन कोड संकलित करें। फ़ाइल के नाम के साथ उसी gcc कमांड को आज़माएं जैसा कि new.c.

$जीसीसीnew.c

अब नीचे दिए गए पिछले a.out कमांड का उपयोग करके उसी कोड का आउटपुट प्रदर्शित करें। आउटपुट बफर की पूरी स्ट्रिंग अक्सा यासीन दिखाता है।

$./ए.आउट

आइए देखें कि कोड कैसे काम करता है जब हम गिनती संख्या को बफ़र डेटा में शामिल बाइट्स की कुल संख्या से अधिक लेते हैं। इसलिए, हम गिनती को 30 के रूप में उपयोग कर रहे हैं। फ़ाइल को सहेजें और बंद करें।

नीचे दिए गए gcc कमांड का उपयोग करके उसी अद्यतन फ़ाइल को संकलित करें।

$जीसीसीnew.c

अब a.out कमांड का उपयोग करके फ़ाइल को निष्पादित करें, और आउटपुट बफर डेटा के साथ-साथ इसके साथ कुछ कचरा मूल्य दिखाएगा जैसा कि नीचे स्नैपशॉट आउटपुट में प्रदर्शित किया गया है। $ ./a.out

आप उसी फ़ाइल में नीचे दिए गए कोड का उपयोग करके फ़ाइल में लिखे गए बाइट्स की कुल संख्या भी देख सकते हैं।

जीसीसी निर्देश द्वारा कोड संकलित करें।

$जीसीसीnew.c

आउटपुट a.out कमांड का उपयोग करके बफ़र डेटा और लाइन ब्रेक सहित बाइट्स की कुल संख्या दिखाता है।

$./ए.आउट

निष्कर्ष:

इस ट्यूटोरियल में, हमने सी में लिखें सिस्टम कॉल का उपयोग करने के लिए अवधारणा को विस्तृत किया है। इस आलेख का उपयोग करके सिस्टम कॉल के विचार को समझने के लिए सभी उदाहरणों का प्रयास करें।