इसलिए यहां हमें फंक्शन में फाइल का नाम दो बार पास करना होगा।
वे बिल्कुल वैसी बात नहीं हैं जैसा कि आप देखते हैं कि उनमें से एक का उपयोग argv[0]
मूल्य के रूप में किया जाता है । यह निष्पादन योग्य के आधार के समान नहीं है; कई / अधिकांश चीजें इसे नजरअंदाज करती हैं और आप जो चाहें वहां डाल सकते हैं।
पहला निष्पादन के लिए वास्तविक मार्ग है, जिसके लिए एक स्पष्ट आवश्यकता है। दूसरे को प्रक्रिया के लिए तीव्रता से पारित किया जाता है क्योंकि नाम इसे लागू करने के लिए उपयोग किया जाता है, लेकिन, जैसे:
execl("/bin/ls", "banana", "-l", NULL);
ठीक काम करेगा, अनुमान /bin/ls
सही तरीका है।
कुछ अनुप्रयोग, हालांकि, का उपयोग करते हैं argv[0]
। आमतौर पर इनमें एक या एक से अधिक सीलिंक होते हैं $PATH
; यह संपीड़न उपयोगिताओं के साथ आम है (कभी-कभी वे इसके बजाय शेल रैपर का उपयोग करते हैं)। यदि आपने xz
स्थापित किया है, तो stat $(which xzcat)
यह एक लिंक दिखाता है xz
, और man xzcat
यह वही है man xz
जो बताता है कि "xzcat xz --decompress --stdout के बराबर है"। जिस तरह से xz यह बता सकता है कि यह कैसे चेक किया गया था argv[0]
, इन बराबर कर रहा है:
execl("/bin/xz", "xzcat", "somefile.xz", NULL);
execl("/bin/xz", "xz", "--decompress", "--stdout", "somefile.xz", NULL);
busybox
कि आप कैसे चाहते हैं कि आप इसे सही कैसे कहें?