मुझे लूप में विभिन्न तर्कों के साथ एक यूनिक्स कमांड निष्पादित करने की आवश्यकता है। अब मुझे आश्चर्य है कि क्या मुझे cmdp() का उपयोग करना चाहिए, cmd और args में गुज़रना, या सिस्टम का उपयोग करना, cmd + args वाली स्ट्रिंग बनाना?सिस्टम() का उपयोग कब करें और execv *() का उपयोग कब करें?
उत्तर
अच्छा, अन्य उत्तरों अधिकतर सही हैं।
सिस्टम, जबकि न केवल fork
एस और फिर exec
एस, यह exec
आपकी प्रक्रिया नहीं है, यह आपके प्रोग्राम को तर्क के रूप में पास करते हुए डिफ़ॉल्ट खोल चलाता है।
तो, जब तक आप वास्तव में एक खोल (पैरामीटर पार्स करने और तरह के लिए) चाहते हैं कि उसे है ज्यादा अधिक की तरह कुछ करने के लिए कुशल:
int i = fork();
if (i != 0) {
exec*(...); // whichever flavor fits the bill
} else {
wait(); // or something more sophisticated
}
exec
फ़ंक्शन का परिवार वर्तमान प्रक्रिया को एक नए से बदल देगा, जबकि system
नई प्रक्रिया को बंद कर देगा, और फिर इसे समाप्त करने के लिए प्रतीक्षा करें। जो भी आप उपयोग करना चाहते हैं उस पर निर्भर करता है।
चूंकि आप इसे एक लूप में कर रहे हैं, मुझे लगता है कि आप मूल प्रक्रिया को प्रतिस्थापित नहीं करना चाहते हैं। इसलिए, मेरा सुझाव है कि आप system
के साथ जाने का प्रयास करें।
मैं केवल execvp का उपयोग करता हूं अगर मैं सिस्टम के साथ जो हासिल करना चाहता हूं उसे प्राप्त नहीं कर सकता। ध्यान दें कि सिस्टम के बराबर प्राप्त करने के लिए, आपको execvp, कांटा और कुछ सिग्नल हैंडलिंग की भी आवश्यकता है।
- 1. ट्यूपल का उपयोग कब और कब करें?
- 2. टैग/लेबल का उपयोग कब करें और शाखा कब करें?
- 3. हाइबरनेट फ़ेचिंग रणनीति - "शामिल" का उपयोग कब करें और "चयन करें" का उपयोग कब करें?
- 4. QueueUserAPC() का उपयोग कब करें?
- 5. Request.RegisterForDispose का उपयोग कब करें?
- 6. reinterpret_cast का उपयोग कब करें?
- 7. का उपयोग कब करें hibernate.connection.provider_class
- 8. Mockito.verify() का उपयोग कब करें?
- 9. कीवर्ड का उपयोग कब करें
- 10. फ़िल्टर_इनपुट का उपयोग कब करें()
- 11. ओपनसीएल का उपयोग कब करें?
- 12. $ .extend ({...}) का उपयोग कब करें?
- 13. ko.utils.unwrapObservable का उपयोग कब करें?
- 14. "हटाएं" का उपयोग कब करें?
- 15. स्ट्रिंगबिल्डर का उपयोग कब करें?
- 16. मल्टीथ्रेड का उपयोग कब करें?
- 17. [MTAThread] का उपयोग कब करें?
- 18. "^" ऑपरेटर का उपयोग कब करें
- 19. Jquery - "यह" कब उपयोग करें और "$ (यह)" कब उपयोग करें?
- 20. OSGi EventAdmin का उपयोग कब करें और कब नहीं?
- 21. डेटाबेस दृश्यों का उपयोग कब करें और कब नहीं?
- 22. .mdf और कब .sdf का उपयोग कब करें?
- 23. डब्ल्यूसीएफ डेटा सेवाओं का उपयोग कब करें और कब नहीं?
- 24. "willChangeValueForKey" और "didChangeValueForKey" का उपयोग कब करें?
- 25. viewDidLoad का उपयोग कब करें और awakeFromNib
- 26. मॉलोक का उपयोग कब और क्यों करें?
- 27. क्यों और कब __noop का उपयोग करें?
- 28. IEquatable का उपयोग कब करें और क्यों
- 29. स्टब्स और मोजे का उपयोग कब करें?
- 30. गुण और विधियों का उपयोग कब करें?
प्रणाली भी लाइन पार्स को आदेश है, जो हो सकता है लाइन विषयों इंजेक्शन हमलों के लिए छेद खोलें। – falstro
मैंने वेब पर इस पर कुछ ट्यूटोरियल की तलाश की और अधिकांश उदाहरण फोर्क() एक नई प्रक्रिया को संपादित किया और execvp() के साथ कांटा को प्रतिस्थापित किया। उसके बाद, माता-पिता की प्रक्रिया समाप्त होने के लिए मूल प्रक्रिया की प्रतीक्षा की गई। क्या यह मूल रूप से कौन सी प्रणाली() करता है? – helpermethod
हां, यह मूल रूप से 'सिस्टम() 'करता है। कॉलिंग 'सिस्टम()' भी डिफ़ॉल्ट खोल चलाता है और आपके प्रोग्राम को तर्क के रूप में पास करता है, जो थोड़ा अधिक ओवरहेड बनाएगा। – jschmier