2013-10-19 6 views
5

यह देखते हुए कि आप एक विंडोज़ - अनन्य प्रोग्राम बना रहे हैं, system() पर कॉल क्यों नफरत करते हैं? जब से मैंने सी ++ में प्रोग्रामिंग शुरू की, तब से "सिस्टम को स्पर्श न करें" कुछ ऐसा था जो मैंने बहुत भयानक सुना है। मैंने उस सिद्धांत को विनम्रता से पालन किया है लेकिन इसके बारे में इतना बुरा क्या है?सिस्टम() के बारे में इतना बुरा क्या है?

+4

प्लस, जो चीजें लोग 'सिस्टम()' में रखना चाहते हैं, आमतौर पर स्क्रीन को साफ़ करने या रोकने जैसी आम तौर पर इतनी पागल होती हैं। यह कुछ ऐसा करने के आलसी और उप-इष्टतम तरीके के रूप में उपयोग किया जाता है जो वास्तविक कोड में बेहतर होगा। –

+0

यदि आप इसे गलत करते हैं और इसमें असमर्थित उपयोगकर्ता इनपुट पास करते हैं तो आप इंजेक्शन कमजोरियों को कमांड करने के लिए अपना एप्लिकेशन खोलते हैं। एक हमलावर आपके आवेदन के समान विशेषाधिकारों के साथ मनमाने ढंग से आदेश चला सकता है। –

+2

जो भी आप चाहते हैं, अगर आप जानते हैं कि आप क्या कर रहे हैं। – deepmax

उत्तर

6

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

इसके अलावा, अधिकांश समय में टिप्पणियों में उल्लेख किया गया है (वास्तव में "सबसे अधिक" 99.9 99% की तरह) system का उपयोग करने की आवश्यकता नहीं है।

+0

"तो यह पूरी तरह से गैर पोर्टेबल है।" प्रणाली (""); मेरे लिए सुंदर पोर्टेबल लग रहा है – user1233963

5

std::system() आवश्यक है कि आप जो भी चाहते हैं उसे करने के लिए आदेश पर भरोसा करें। आपके पास यह सत्यापित करने का कोई तरीका नहीं है कि क्या यह धारणा उचित है या नहीं। उदाहरण के लिए पाथ पर्यावरण चर के लिए असामान्य मान मानक सेटअप की तुलना में एक अलग प्रोग्राम निष्पादित किया जा सकता है।

std::system() पर कॉल का व्यवहार सिस्टम निर्भर है। यहां तक ​​कि यदि इस समय की आवश्यकता है, तो एप्लिकेशन को अन्य ऑपरेटिंग सिस्टम पर चलाने की आवश्यकता नहीं है, यह आवश्यकता बदल सकती है। यह देखते हुए कि std::system() अक्सर उन प्रयोजनों के लिए उपयोग किया जाता है जिन्हें अधिक पोर्टेबल तरीके से प्राप्त किया जा सकता है (विशेष रूप से शुरुआती लोगों द्वारा), यहां प्लेटफॉर्म निर्भरता पेश करने की आवश्यकता नहीं है।

1

system() ओएस के कमांड दुभाषिया को एक अलग प्रक्रिया के रूप में आमंत्रित करता है। इससे अधिक बार, कॉलिंग प्रक्रिया के भीतर सीधे उसी परिणाम को पूरा करने के लिए मूल एपीआई उपलब्ध हैं और इसके ऊपर अधिक नियंत्रण के साथ।

संबंधित मुद्दे