ใช้กรณี:
คุณสามารถใช้ชื่อโปรแกรมที่จะเปลี่ยนพฤติกรรมโปรแกรม
ตัวอย่างเช่นคุณสามารถสร้าง symlink ไปยังไบนารีจริงได้
ตัวอย่างที่มีชื่อเสียงหนึ่งที่ใช้เทคนิคนี้คือโครงการ busybox ซึ่งติดตั้งไบนารีเดียวและ symlink มากมายให้กับมัน (ls, cp, mv, ฯลฯ ) พวกเขากำลังทำเพื่อประหยัดพื้นที่เก็บข้อมูลเนื่องจากเป้าหมายเป็นอุปกรณ์ฝังตัวขนาดเล็ก
สิ่งนี้ยังใช้ในsetarch
จาก util-linux:
$ 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] จะต้องเป็นตัวละคร null ถ้าชื่อโปรแกรมไม่สามารถใช้ได้จากสภาพแวดล้อมโฮสต์
หมายเหตุ C Standard บอกว่า "ชื่อโปรแกรม" ไม่ใช่ "ชื่อไฟล์"