Yani burada dosya ismini fonksiyonda iki kez geçmemiz gerekiyor.
Bunlardan birininargv[0]
değer olarak kullanıldığını gözlemleyerek fark ettiğiniz gibi değiller . Bunun çalıştırılabilir dosyanın taban adıyla aynı olması gerekmez; birçok / çoğu şey onu görmezden gelir ve oraya ne istersen koyabilirsin.
Birincisi, açık bir zorunluluk olan yürütülebilir dosyaya giden gerçek yoldur. İkincisi, görünüşe göre onu çağırmak için kullanılan ad olarak geçirilir, ancak, örneğin:
execl("/bin/ls", "banana", "-l", NULL);
İyi çalışacaktır /bin/ls
, doğru yol olduğunu varsayalım .
Ancak bazı uygulamalar yararlanır argv[0]
. Genellikle bunların içinde bir veya daha fazla sembolik bağlantı vardır $PATH
; bu sıkıştırma yardımcı programlarında yaygındır (bazen bunun yerine kabuk sarmalayıcıları kullanırlar). Eğer varsa xz
, yüklü stat $(which xzcat)
gösterileri bunun için bir bağlantı xz
ve man xzcat
aynı gibidir man xz
"xzcat xz --decompress --stdout eşdeğerdir" açıklıyor. Xz'nin nasıl çağrıldığını söyleyebilmesinin yolu argv[0]
şu eşdeğerdir:
execl("/bin/xz", "xzcat", "somefile.xz", NULL);
execl("/bin/xz", "xz", "--decompress", "--stdout", "somefile.xz", NULL);
busybox
dediğinize bağlı olarak nasıl olmasını istediğinizi açıklayabilir mi?