সুতরাং এখানে আমরা ফাংশন মধ্যে ফাইলের নাম দুইবার পাস করতে হবে।
তারা পুরোপুরি একই জিনিস হিসাবে আপনি যে নিরীক্ষক দ্বারা লক্ষ্য করা হয় এক তাদের হিসাবে ব্যবহার করা হয় 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 এর সমতুল্য" বলে ব্যাখ্যা করে explains এক্সজেডের উপায়টি কীভাবে এটি আহ্বান জানানো হয়েছিল তা পরীক্ষা argv[0]
করে এই সমতুল্য করে তৈরি করা যায়:
execl("/bin/xz", "xzcat", "somefile.xz", NULL);
execl("/bin/xz", "xz", "--decompress", "--stdout", "somefile.xz", NULL);
busybox
যে আপনি কীভাবে এটি সঠিকভাবে কল করতে পারেন তার উপর নির্ভর করে আপনি এটি চান কী হতে পারে?