c shell system programming tutorial with examples
यह ट्यूटोरियल C ++ शेल या सिस्टम () कॉल का एक विस्तृत विवरण देता है जिसका उपयोग C ++ प्रोग्राम से ऑपरेटिंग सिस्टम कमांड को इनवॉइस करने के लिए किया जाता है।
सॉफ्टवेयर प्रोग्रामिंग की दुनिया में, अधिकांश ऑपरेटिंग सिस्टम एपीआई सी पर लक्षित होते हैं। C ++ भाषा C ++ कोड से C फ़ंक्शन को कॉल करने के लिए प्रत्यक्ष समर्थन प्रदान करती है।
इसलिए, इस मामले में, C ++ भी एक सिस्टम प्रोग्रामिंग भाषा बन जाती है। C ++ ऑपरेटिंग सिस्टम कमांड को C / C ++ प्रोग्राम से इनवॉइस करने के लिए एक 'सिस्टम ()' कमांड प्रदान करता है।
दूसरे शब्दों में, हम कह सकते हैं कि सिस्टम () कमांड C ++ शेल कमांड को निष्पादित करता है। इस ट्यूटोरियल में, हम शेल कमांड या सिस्टम () के निष्पादन के बारे में विस्तार से चर्चा करेंगे।
=> यहाँ सरल सी ++ प्रशिक्षण श्रृंखला का अन्वेषण करें।
आप क्या सीखेंगे:
C ++ सिस्टम कॉल
अब सिस्टम कॉल और उसके विवरण पर चर्चा करते हैं।
समारोह प्रोटोटाइप: int सिस्टम (const char * कमांड);
पैरामीटर:
कमांड => एक सी-स्ट्रिंग जिसमें कमांड को निष्पादित किया जाना है।
यदि कोई नल पॉइंटर पास किया गया है, तो केवल कमांड प्रोसेसर के लिए एक जांच की जाती है।
प्रतिलाभ की मात्रा: एक अंतर मान लौटाता है। लौटाया गया मान इस बात पर निर्भर करता है कि क्या सी-स्टाइल स्ट्रिंग को एक तर्क के रूप में निर्दिष्ट किया गया है या यदि एक शून्य सूचक निर्दिष्ट किया गया है।
- नल सूचक => यदि नल पॉइंटर निर्दिष्ट किया गया है, तो यह एक गैर-शून्य मान देता है यदि कमांड प्रोसेसर उपलब्ध है और अन्यथा शून्य है।
- आज्ञा निर्दिष्ट की => जब कमांड निर्दिष्ट किया जाता है, तो आमतौर पर स्थिति कोड वापस आ जाता है लेकिन लौटाया गया मूल्य सिस्टम और लाइब्रेरी कार्यान्वयन पर निर्भर करता है।
विवरण: सिस्टम कमांड एक कमांड को एक तर्क के रूप में आपूर्ति करता है। कमांड निष्पादित करके लौटाया गया मूल्य आमतौर पर सिस्टम और लाइब्रेरी कार्यान्वयन-निर्भर है। यदि एक कमांड के बजाय एक नल पॉइंटर पास किया गया है, तो यह कॉल केवल यह जांचता है कि कमांड प्रोसेसर उपलब्ध है या नहीं।
यदि कमांड प्रोसेसर उपलब्ध है और अन्यथा शून्य है तो कॉल एक गैर-शून्य मान लौटाता है।
सिस्टम () का उपयोग करके, हम लगभग किसी भी कमांड को चला सकते हैं बशर्ते ऑपरेटिंग सिस्टम इसे अनुमति देता है। उदाहरण के लिए, हम सिस्टम ('dir') या सिस्टम ('ls') को समान आसानी से चला सकते हैं। वास्तव में, हम अपने कार्यक्रम से जीसीसी संकलक को भी आमंत्रित कर सकते हैं।
नीचे सूचीबद्ध सिस्टम कमांड के कुछ उदाहरण हैं जो C ++ शेल कमांड को निष्पादित करने के लिए C ++ में उपयोग किए जाते हैं।
उदाहरण 1:
यह उदाहरण एक तर्क के रूप में अशक्त सूचक के साथ सिस्टम कमांड प्रदर्शन दिखाता है।
#include #include using namespace std; int main () { int i; cout<< 'Check if command processor is available...'< आउटपुट:

उपरोक्त कार्यक्रम में, हम पहले जांचते हैं कि कमांड प्रोसेसर सिस्टम कॉल के लिए अशक्त होकर उपलब्ध है या नहीं। यदि कमांड प्रोसेसर उपलब्ध है तो हम dir कमांड को निष्पादित करते हैं। यदि कमांड प्रोसेसर उपलब्ध नहीं है, तो हम एक विफलता के साथ प्रोग्राम से बाहर निकलते हैं।
उदाहरण 2:
नीचे दिया गया उदाहरण एलएस कमांड के निष्पादन को दिखाता है जिसमें आउटपुट को टेक्स्ट फाइल 'output.txt' पर पाइप किया जाता है। सिस्टम () कॉल निष्पादित होने के बाद, हम output.txt की सामग्री प्रिंट करते हैं।
#include #include #include int main() { std::system('ls -l >output.txt'); // execute the UNIX command 'ls -l >test.txt' std::cout << std::ifstream('output.txt').rdbuf(); }
आउटपुट:

उपरोक्त प्रोग्राम का आउटपुट फाइल 'output.txt' की सामग्री है जो ls कमांड के आउटपुट के अलावा कुछ भी नहीं है।
उदाहरण 3:
नीचे दिया गया C ++ प्रोग्राम पिछले उदाहरण की निरंतरता है। यहाँ हम ls कमांड को निष्पादित करते हैं जो कि एक सिस्टम कॉल का उपयोग कर output.txt पर पुनर्निर्देशित किया जाता है। फिर हम फ़ाइल आउटपुट को हटाने के लिए 'rm' (हटाएं) कमांड के साथ एक और सिस्टम कॉल निष्पादित करते हैं।
इसके बाद, हम फिर से ls कमांड को निष्पादित करते हैं, और इस बार हम आउटपुट को किसी अन्य फ़ाइल यानी text.txt पर रीडायरेक्ट करते हैं। अंत में, हम text.txt फ़ाइल की सामग्री को प्रिंट करते हैं।
#include #include #include using namespace std; int main() { // execute the UNIX command 'ls -l >output.txt' system('ls -l >output.txt'); cout << ifstream('output.txt').rdbuf(); // execute the UNIX command 'rm output.txt' system('rm output.txt'); cout<<'removed output.txt'<text.txt' cout<<'ls after removing output.txt & creating text.txt'<text.txt'); cout << ifstream('text.txt').rdbuf(); }
आउटपुट:

C ++ सिस्टम रोकें
सिस्टम ('ठहराव') कमांड निष्पादित होने पर अस्थायी रूप से संचालन को रोक देता है। सिस्टम ('ठहराव') कॉल ऑपरेटिंग सिस्टम पर निर्भर है और निम्न चरणों को पूरा करता है:
- यह कॉल अस्थायी रूप से प्रोग्राम को निलंबित कर देता है और ऑपरेटिंग सिस्टम शेल को खोलने के लिए ऑपरेटिंग सिस्टम को भी सिग्नल करता है।
- ऑपरेटिंग सिस्टम कमांड को निष्पादित करने के लिए मेमोरी आवंटित करता है।
- फिर यह मेमोरी को हटाता है, ऑपरेटिंग सिस्टम से बाहर निकालता है, और निलंबित प्रोग्राम को फिर से शुरू करता है।
निम्न प्रोग्राम एक सिस्टम ('पॉज़') कॉल का एक उदाहरण दिखाता है।
#include #include using namespace std; int main () { cout << 'Hello World!' << endl; system('pause'); return 0; }
आउटपुट:

जैसा कि पहले ही उल्लेख किया गया है, सिस्टम ('पॉज़') कॉल बहुत धीमा है और ऑपरेटिंग सिस्टम पर निर्भर है। उपरोक्त चरणों को निष्पादित करने के लिए भारी हैं।
इसके अतिरिक्त, सिस्टम कॉल से कुछ सुरक्षा जोखिम भी हो सकते हैं। इसलिए हम आमतौर पर अपने कार्यक्रमों में प्रणाली ('ठहराव') पर भरोसा नहीं करते हैं।
इसके बजाय, हम सिस्टम के रूप में एक ही कार्यक्षमता ('ठहराव') प्राप्त करने के लिए cin.get का उपयोग कर सकते हैं जैसा कि नीचे दिए गए कार्यक्रम में दिखाया गया है।
#include #include using namespace std; int main () { cout << 'This is SoftwareTestingHelp.com' << endl; cin.get(); // same as getchar() return 0; }
आउटपुट:

जैसा कि ऊपर दिखाया गया है, हम आउटपुट को रोकने के लिए Cin.get का उपयोग कर सकते हैं जब तक कि हम कुछ कुंजी दबाते हैं। सिस्टम के विपरीत ('ठहराव') ऑपरेटिंग सिस्टम पर निर्भर नहीं है। जब हम सिस्टम को निष्पादित करते हैं ('ठहराव') किए गए चरणों का भी पालन नहीं करता है।
सिस्टम बनाम लाइब्रेरी फ़ंक्शंस
सिस्टम कॉल ऑपरेटिंग सिस्टम पर निर्भर हैं। वे संसाधनों पर बहुत धीमी और भारी हैं। लाइब्रेरी फ़ंक्शंस OS-निर्भर नहीं हैं। वे तेज हैं और बहुत सारे संसाधनों या स्मृति का उपभोग नहीं करते हैं।
सिस्टम कॉल्स का सबसे आम उपयोग सिस्टम ('पॉज़') और सिस्टम ('cls') कमांड के लिए है। लाइब्रेरी फ़ंक्शंस अंतर्निहित कार्य होते हैं जिनमें गणित, फ़ाइल I / O आदि से संबंधित कार्य होते हैं।
निष्कर्ष
इस C ++ शैल ट्यूटोरियल में, हमने विभिन्न सिस्टम फ़ंक्शंस पर चर्चा की। हमने सिस्टम कमांड को एक नल पॉइंटर पास करने के उदाहरण देखे जो यह जांचते हैं कि कमांड प्रोसेसर उपलब्ध है या नहीं। हमने सिस्टम ('ठहराव') कमांड और इसके विकल्पों पर विस्तार से चर्चा की।
=> यहां सभी C ++ ट्यूटोरियल की जांच करें।
एमपी 3 कनवर्टर करने के लिए सबसे अच्छा यूट्यूब क्या है
अनुशंसित पाठ
- शैल C ++ में उदाहरणों के साथ
- उदाहरणों के साथ यूनिक्स शैल स्क्रिप्टिंग ट्यूटोरियल
- यूनिक्स शैल लूप प्रकार: लूप के लिए, जबकि लूप, यूनिक्स में लूप तक
- यूनिक्स शैल स्क्रिप्ट अंकगणित और बूलियन ऑपरेटर्स उदाहरण
- पैरामीटर और रिटर्न के साथ यूनिक्स शैल स्क्रिप्ट कार्य
- उन्नत यूनिक्स शैल स्क्रिप्टिंग: एरे, फ़ाइल और स्ट्रिंग टेस्ट ऑपरेटर्स, विशेष चर
- C ++ रेगेक्स ट्यूटोरियल: C ++ में रेग्युलर एक्सप्रेशंस उदाहरणों के साथ