इसलिए यहां हमें फंक्शन में फाइल का नाम दो बार पास करना होगा।
वे बिल्कुल वैसी बात नहीं हैं जैसा कि आप देखते हैं कि उनमें से एक का उपयोग 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कि आप कैसे चाहते हैं कि आप इसे सही कैसे कहें?