2014-10-14 9 views
5

उदा। execve (2) है, जो POSIX के अनुसार इस प्रोटोटाइप [1] है:पॉइंटर्स को कॉन्स्ट करने के लिए argv और envp तर्क क्यों नहीं हैं?

int execve(const char *path, char *const argv[], char *const envp[]); 
मेरे लिए

, ऐसा लगता है जैसे कि

int execve(const char *path, const char *const argv[], const char *const envp[]); 

एक स्पष्ट सुधार हो गया होता।

तो, क्या किसी को पता है कि यह ऐसा क्यों है? संभवतः दिए गए argv/envp तारों में हेरफेर करने के लिए की आवश्यकता क्या समझा सकता है?

[1] http://pubs.opengroup.org/onlinepubs/009695399/functions/exec.html

+0

[मेरे हटाए गए उत्तर पर आपकी टिप्पणियों के जवाब में] ओह, मुझे लगता है कि आपका क्या मतलब है - हाँ, मेरा उत्तर 'मुख्य' के तर्कों को संबोधित करता है, न कि 'argv' के तर्क। यह वास्तव में एक सीपीआई सवाल है, यूनिक्स सिस्टम डिज़ाइन प्रश्न नहीं। मुझे लगता है कि उत्तर मूल, प्री-कॉन्स्ट एपीआई के साथ बस ऐतिहासिक संगतता है। – Gilles

+2

सी एपीआई (सामान्य सिस्टम डिज़ाइन के विपरीत) के बारे में प्रश्न यहां से विषय हैं, इसलिए मैं माइग्रेट करने के लिए मतदान कर रहा हूं [इसलिए]। (दोबारा पोस्ट न करें, प्रश्न जल्द ही स्थानांतरित हो जाएगा।) – Gilles

+0

संभवतः कुछ प्रोग्राम इन बफर को –

उत्तर

-1

कुछ कार्यक्रमों argv तार में हेरफेर ताकि ps उत्पादन कुछ राज्य से संबंधित जानकारी दिखा। उदाहरण के लिए:

root  6550 10809 0 13:10 ?  00:00:00 pure-ftpd (IDLE) 
root  32216  1 0 Apr05 ?  00:00:00 vtund[s]: waiting for connections on port 5000 
1023  30448 9847 0 09:01 ?  00:00:01 imap [username 192.168.1.135] 

इसलिए argv मूल्यों स्थिर नहीं कर रहे हैं और इस तरह के रूप में घोषित किया नहीं किया जाना चाहिए।

+1

संभवतः, वे प्रोग्राम, अपने * अपने * पता स्थान में argv तारों की प्रति को संशोधित करते हैं, न कि प्रक्रिया के पता स्थान को जिसे 'execve' कहा जाता है। –

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