आपके प्रश्न से लगता है कि वन उत्तर के लिए कॉल किया गया था, और यहाँ उत्तर पेड़ के उत्तर की तरह प्रतीत होते हैं, इसलिए मैंने सोचा कि मैं आपको वन उत्तर दूंगा।
यह बहुत कम ही होता है कि C प्रोग्राम कैसे लिखे जाते हैं। यह हमेशा होता है कि शेल स्क्रिप्ट कैसे लिखी जाती है, और कभी-कभी पायथन, पर्ल या रूबी प्रोग्राम कैसे लिखे जाते हैं।
लोग आमतौर पर सिस्टम पुस्तकालयों के आसान उपयोग के लिए सी में लिखते हैं और ओएस सिस्टम कॉल के साथ-साथ गति के लिए निम्न-स्तरीय पहुंच का उपयोग करते हैं। और सी एक कठिन भाषा है, जिसमें लिखने के लिए लोगों को उन चीजों की आवश्यकता नहीं है, तो वे सी का उपयोग नहीं करते हैं। सी प्रोग्राम आमतौर पर केवल साझा पुस्तकालयों और कॉन्फ़िगरेशन फ़ाइलों पर निर्भरता की उम्मीद करते हैं।
एक उप-प्रक्रिया के लिए बाहर जाना विशेष रूप से तेज़ नहीं है, और इसके लिए निम्न-स्तरीय प्रणाली सुविधाओं के लिए ठीक-ठीक और नियंत्रित पहुंच की आवश्यकता नहीं होती है, और यह एक बाहरी निष्पादन योग्य पर संभवतः आश्चर्यजनक निर्भरता का परिचय देता है, इसलिए यह देखना असामान्य है C कार्यक्रमों में।
कुछ अतिरिक्त चिंताएं हैं। सुरक्षा और पोर्टेबिलिटी चिंताओं का उल्लेख लोग पूरी तरह से मान्य हैं। वे शेल स्क्रिप्ट के लिए समान रूप से मान्य हैं, लेकिन लोग शेल स्क्रिप्ट में उन प्रकार के मुद्दों की उम्मीद कर रहे हैं। लेकिन सी कार्यक्रमों में आमतौर पर सुरक्षा चिंता के इस वर्ग की उम्मीद नहीं की जाती है, जो इसे और अधिक खतरनाक बनाती है।
लेकिन, मेरी राय में, सबसे बड़ी चिंताओं को popen
अपने कार्यक्रम के बाकी हिस्सों के साथ बातचीत करना होगा। popen
एक बाल प्रक्रिया का निर्माण करना है, इसके उत्पादन को पढ़ना है और इसकी निकास स्थिति को इकट्ठा करना है। इस बीच, वह प्रक्रिया 'stderr आपके प्रोग्राम के रूप में उसी stderr से जुड़ी होगी, जो भ्रामक आउटपुट का कारण हो सकती है, और इसका स्टड आपके प्रोग्राम के समान होगा, जो अन्य दिलचस्प मुद्दों का कारण हो सकता है। आप इसे </dev/null 2>/dev/null
स्ट्रिंग में शामिल करके हल कर सकते हैं popen
क्योंकि यह शेल द्वारा व्याख्या की गई है।
और popen
एक बच्चे की प्रक्रिया बनाता है। यदि आप सिग्नल से निपटने या खुद से प्रक्रिया करने के लिए कुछ भी करते हैं तो आपको अजीब SIGCHLD
संकेत मिल सकते हैं। आपकी कॉल wait
अजीब तरह से बातचीत कर सकती है popen
और संभवत: अजीब स्थिति पैदा कर सकती है।
सुरक्षा और पोर्टेबिलिटी की चिंताएं हैं। जैसा कि वे शेल स्क्रिप्ट या किसी भी चीज के लिए हैं जो सिस्टम पर अन्य निष्पादनयोग्य को शुरू करता है। और आपको सावधान रहना होगा कि आपके प्रोग्राम का उपयोग करने वाले लोग आपके द्वारा पास किए गए स्ट्रिंग में शेल मेटा-चार्जर्स प्राप्त करने में सक्षम नहीं हैं popen
क्योंकि यह स्ट्रिंग सीधे sh
साथ दिया गया है sh -c <string from popen as a single argument>
।
लेकिन मुझे नहीं लगता कि वे सी प्रोग्राम का उपयोग करते हुए देखना अजीब है popen
। यह अजीब है क्योंकि सी आमतौर पर एक निम्न स्तर की भाषा है, और popen
निम्न स्तर नहीं है। और क्योंकि popen
आपके प्रोग्राम पर स्थानों की डिज़ाइन की कमी का उपयोग किया जाता है, क्योंकि यह आपके प्रोग्राम के मानक इनपुट और आउटपुट के साथ अजीब तरीके से बातचीत करेगा और इसे आपकी खुद की प्रक्रिया प्रबंधन या सिग्नल हैंडलिंग करने के लिए एक दर्द बना देगा। और क्योंकि C कार्यक्रमों में आमतौर पर बाहरी निष्पादकों पर निर्भरता की उम्मीद नहीं की जाती है।