बक्सों का इस्तेमाल करें:
प्रोग्राम के व्यवहार को बदलने के लिए आप प्रोग्राम के नाम का उपयोग कर सकते हैं ।
उदाहरण के लिए, आप वास्तविक बाइनरी के लिए कुछ सहानुभूति बना सकते हैं।
एक प्रसिद्ध उदाहरण जहां इस तकनीक का उपयोग किया जाता है वह बिजीबॉक्स प्रोजेक्ट है जो केवल एक ही बाइनरी स्थापित करता है और कई सिम्लिंक करता है। (ls, cp, mv, आदि)। वे भंडारण स्थान को बचाने के लिए ऐसा कर रहे हैं क्योंकि उनके लक्ष्य छोटे एम्बेडेड डिवाइस हैं।
इसका उपयोग उपयोग setarch
-लिनेक्स से भी किया जाता है :
$ ls -l /usr/bin/ | grep setarch
lrwxrwxrwx 1 root root 7 2015-11-05 02:15 i386 -> setarch
lrwxrwxrwx 1 root root 7 2015-11-05 02:15 linux32 -> setarch
lrwxrwxrwx 1 root root 7 2015-11-05 02:15 linux64 -> setarch
-rwxr-xr-x 1 root root 14680 2015-10-22 16:54 setarch
lrwxrwxrwx 1 root root 7 2015-11-05 02:15 x86_64 -> setarch
यहां वे मूल रूप से कई डुप्लिकेट स्रोत फ़ाइलों से बचने या स्रोतों को अधिक पठनीय रखने के लिए इस तकनीक का उपयोग कर रहे हैं ।
एक अन्य उपयोग मामला एक प्रोग्राम होगा जिसमें रनटाइम पर कुछ मॉड्यूल या डेटा लोड करने की आवश्यकता होती है। प्रोग्राम पथ होने से आप प्रोग्राम स्थान के सापेक्ष एक पथ से मॉड्यूल लोड कर सकते हैं ।
इसके अलावा कई कार्यक्रम प्रोग्राम नाम सहित त्रुटि संदेश प्रिंट करते हैं ।
क्यों :
- क्योंकि यह POSIX सम्मेलन (
man 3p execve
):
argv नए प्रोग्राम में दिए गए तर्क स्ट्रिंग का एक सरणी है। कन्वेंशन द्वारा, इन स्ट्रिंग्स में से सबसे पहले फ़ाइल नाम से संबंधित फ़ाइल नाम निष्पादित होना चाहिए।
- यह C मानक (कम से कम C99 और C11):
यदि argc का मान शून्य से अधिक है, तो argv द्वारा इंगित स्ट्रिंग [0] कार्यक्रम के नाम का प्रतिनिधित्व करती है; यदि प्रोग्राम का नाम होस्ट वातावरण से उपलब्ध नहीं है, तो argv [0] [0] शून्य वर्ण होगा।
नोट सी मानक "प्रोग्राम का नाम" नहीं "फ़ाइल नाम" कहता है।