এই প্রবন্ধে, আমি ফাংশনের এক্সিকিউটিভ ফ্যামিলি সম্পর্কে কথা বলতে যাচ্ছি এবং সি -তে এই এক্সিকিউটিভ ফ্যামিলি ফাংশনগুলির প্রত্যেকটি কীভাবে ব্যবহার করতে হয় তা আপনাকে দেখাব।
Exec পরিবারে সি সিস্টেমের কাজ:
Exec ফাংশন পরিবারগুলো হেডারে সংজ্ঞায়িত করা হয়েছে unistd.h । সুতরাং, আপনাকে অবশ্যই সি প্রোগ্রামে এই হেডারটি ব্যবহার করতে হবে যেখানে আপনি এই ফাংশনগুলি ব্যবহার করতে চান।
উপলব্ধ ফাংশন তাদের ফাংশন পরামিতি সহ নিচে দেওয়া হল:
- int execl (const char *path, const char *arg,…, NULL);
- int execlp (const char *file, const char *arg,…, NULL);
- int execv (const char *path, char *const argv []);
- int execvp (const char *file, char *const argv []);
- int execle (const char *path, const char *arg,…, NULL, char *const envp []);
- int execve (const char *file, char *const argv [], char *const envp []);
আসুন দেখি এই প্রতিটি ফাংশন কি করে এবং কিভাবে সেগুলো ব্যবহার করতে হয়।
execl () সিস্টেম ফাংশন:
Execl () সিস্টেম ফাংশন এক্সিকিউটেবল বাইনারি ফাইলের পথ নেয় (যেমন / বিন / এলএস ) প্রথম এবং দ্বিতীয় যুক্তি হিসাবে। তারপর, যুক্তি (যেমন -এলএইচ , /বাড়ি ) যেটি আপনি এক্সিকিউটেবল এর কাছে পাস করতে চান খালি । তারপর execl () সিস্টেম ফাংশন কমান্ড চালায় এবং আউটপুট প্রিন্ট করে। যদি কোন ত্রুটি ঘটে, তাহলে execl () রিটার্ন -1। অন্যথায়, এটি কিছুই ফেরত দেয় না।
বাক্য গঠন:
intউদাহরণস্বরূপ(const গৃহস্থালি *পথ, const গৃহস্থালি *রাগী,...,খালি);Execl () সিস্টেম ফাংশনের একটি উদাহরণ নিচে দেওয়া হল:
#অন্তর্ভুক্ত
intপ্রধান(অকার্যকর) {
গৃহস্থালি *বাইনারিপথ= ' / বিন / এলএস';
গৃহস্থালি *arg1= '-এলএইচ';
গৃহস্থালি *arg2= '/বাড়ি';
উদাহরণস্বরূপ(বাইনারিপথ,বাইনারিপথ,arg1,arg2,খালি);
প্রত্যাবর্তন 0;
}
আমি দৌড়েছি ls -lh / বাড়ি execl () সিস্টেম ফাংশন ব্যবহার করে কমান্ড। আপনি দেখতে পাচ্ছেন, সঠিক ফলাফল প্রদর্শিত হবে।
execlp () সিস্টেম ফাংশন:
execl () ব্যবহার করে না পথ পরিবেশ সূচক. সুতরাং, এক্সিকিউটেবল ফাইলের সম্পূর্ণ পথটি execl () দিয়ে চালানোর জন্য প্রয়োজন। execlp () PATH এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করে। সুতরাং, যদি PATH এ একটি এক্সিকিউটেবল ফাইল বা কমান্ড পাওয়া যায়, তাহলে কমান্ড বা ফাইলের নাম এটি চালানোর জন্য যথেষ্ট, সম্পূর্ণ পথের প্রয়োজন নেই।
বাক্য গঠন:
intexeclp(const গৃহস্থালি *ফাইল, const গৃহস্থালি *রাগী,...,খালি);আমরা execlp () সিস্টেম ফাংশন ব্যবহার করে execl () উদাহরণটি পুনরায় লিখতে পারি:
#অন্তর্ভুক্তintপ্রধান(অকার্যকর) {
গৃহস্থালি *অনুষ্ঠানের নাম= 'ls';
গৃহস্থালি *arg1= '-এলএইচ';
গৃহস্থালি *arg2= '/বাড়ি';
execlp(অনুষ্ঠানের নাম,অনুষ্ঠানের নাম,arg1,arg2,খালি);
প্রত্যাবর্তন 0;
}
আমি কেবল কমান্ডের নাম পাস করেছি ls , পুরো পথ নয় / বিন / এলএস । আপনি দেখতে পাচ্ছেন, আমি আগের মতো একই আউটপুট পেয়েছি।
execv () সিস্টেম ফাংশন:
Execl () ফাংশনে, এক্সিকিউটেবল ফাইলের পরামিতিগুলি বিভিন্ন আর্গুমেন্ট হিসাবে ফাংশনে প্রেরণ করা হয়। Execv () দিয়ে, আপনি একটি NULL সমাপ্ত অ্যারে সমস্ত পরামিতি পাস করতে পারেন argv । অ্যারের প্রথম উপাদানটি এক্সিকিউটেবল ফাইলের পথ হওয়া উচিত। অন্যথায়, execv () ফাংশনটি execl () ফাংশন হিসাবে কাজ করে।
বাক্য গঠন:
intexecv(const গৃহস্থালি *পথ, গৃহস্থালি *constargv[]);আমরা execl () উদাহরণটি পুনরায় লিখতে পারি:
#অন্তর্ভুক্তintপ্রধান(অকার্যকর) {
গৃহস্থালি *বাইনারিপথ= ' / বিন / এলএস';
গৃহস্থালি *যুক্তি[] = {বাইনারিপথ, '-এলএইচ', '/বাড়ি',খালি};
execv(বাইনারিপথ,যুক্তি);
প্রত্যাবর্তন 0;
}
আপনি দেখতে পাচ্ছেন, আমি সঠিক আউটপুট পাচ্ছি।
execvp () সিস্টেম ফাংশন:
Execv () সিস্টেম ফাংশন হিসাবে একই ভাবে কাজ করে। কিন্তু, PATH এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করা হয়। সুতরাং, এক্সিকিউটেবল ফাইলের সম্পূর্ণ পথের প্রয়োজন নেই যেমন execlp ()।
বাক্য গঠন:
intexecvp(const গৃহস্থালি *ফাইল, গৃহস্থালি *constargv[]);আমরা execv () উদাহরণটি পুনরায় লিখতে পারি:
#অন্তর্ভুক্তintপ্রধান(অকার্যকর) {
গৃহস্থালি *অনুষ্ঠানের নাম= 'ls';
গৃহস্থালি *যুক্তি[] = {অনুষ্ঠানের নাম, '-এলএইচ', '/বাড়ি',খালি};
execvp(অনুষ্ঠানের নাম,যুক্তি);
প্রত্যাবর্তন 0;
}
আপনি দেখতে পাচ্ছেন, সঠিক আউটপুট প্রদর্শিত হবে।
execle () সিস্টেম ফাংশন:
এক্সেল () এর মতো কাজ করে তবে আপনি এটির সাথে আপনার নিজের পরিবেশের ভেরিয়েবল সরবরাহ করতে পারেন। পরিবেশ ভেরিয়েবল একটি অ্যারে হিসাবে পাস করা হয় envp । এর শেষ উপাদান envp অ্যারে শূন্য হওয়া উচিত। অন্যান্য সমস্ত উপাদানগুলিতে স্ট্রিং হিসাবে কী-মান জোড়া থাকে।
বাক্য গঠন:
intexecle(const গৃহস্থালি *পথ, const গৃহস্থালি *রাগী,...,খালি, গৃহস্থালি * constenvp[] );Execle () সিস্টেম ফাংশনের একটি উদাহরণ নিচে দেওয়া হল:
#অন্তর্ভুক্তintপ্রধান(অকার্যকর) {
গৃহস্থালি *বাইনারিপথ= '/বিন/ব্যাশ';
গৃহস্থালি *arg1= '-সি';
গৃহস্থালি *arg2= 'বের করে দিল '$ HOSTNAME এ যান:আপনার ব্রাউজার থেকে $ PORT।'';
গৃহস্থালি *constenv[] = {'HOSTNAME = www.linuxhint.com', 'পোর্ট = 8080',খালি};
execle(বাইনারিপথ,বাইনারিপথ,arg1,arg2,খালি,env);
প্রত্যাবর্তন 0;
}
আমি দুটি পরিবেশ ভেরিয়েবল পাস করেছি HOSTNAME এবং বন্দর execle () ফাংশনে। আপনি দেখতে পাচ্ছেন, আমি তাদের এক্সিকিউটেবল থেকে অ্যাক্সেস করতে পারি /বিন/ব্যাশ ।
execve () সিস্টেম ফাংশন:
যেমন execle () আপনি execve () সহ আপনার নিজের পরিবেশের ভেরিয়েবল প্রদান করতে পারেন। আপনি অ্যারে হিসাবে আর্গুমেন্টগুলি পাস করতে পারেন যেমন আপনি execv () এ করেছেন।
বাক্য গঠন:
intচালানো(const গৃহস্থালি *ফাইল, গৃহস্থালি *constargv[], গৃহস্থালি *constenvp[]);Execle () উদাহরণটি নিম্নরূপ পুনর্লিখন করা যেতে পারে:
#অন্তর্ভুক্তintপ্রধান(অকার্যকর) {
গৃহস্থালি *বাইনারিপথ= '/বিন/ব্যাশ';
গৃহস্থালি *constযুক্তি[] = {বাইনারিপথ, '-সি', 'বের করে দিল '$ HOSTNAME এ যান:$ পোর্ট
আপনার ব্রাউজার থেকে।'',খালি};
গৃহস্থালি *constenv[] = {'HOSTNAME = www.linuxhint.com', 'পোর্ট = 8080',খালি};
চালানো(বাইনারিপথ,যুক্তি,env);
প্রত্যাবর্তন 0;
}
আপনি দেখতে পাচ্ছেন, আমরা execle () উদাহরণের মতো একই আউটপুট পাই।
সুতরাং, আপনি লিনাক্সে সিস্টেম প্রোগ্রামিংয়ের জন্য সি -তে এক্সিকিউশন ফাংশন পরিবার ব্যবহার করেন। এই নিবন্ধটি পড়ার জন্য ধন্যবাদ।