সি -তে এক্সিক সিস্টেম কল

Exec System Call C



এক্সিকিউটিভ ফ্যামিলির সি -তে অনেকগুলি ফাংশন রয়েছে। এই সি ফাংশনগুলি মূলত একটি পৃথক প্রক্রিয়ায় একটি সিস্টেম কমান্ড চালানোর জন্য ব্যবহৃত হয় যা প্রধান প্রোগ্রাম এবং আউটপুট প্রিন্ট করে।

এই প্রবন্ধে, আমি ফাংশনের এক্সিকিউটিভ ফ্যামিলি সম্পর্কে কথা বলতে যাচ্ছি এবং সি -তে এই এক্সিকিউটিভ ফ্যামিলি ফাংশনগুলির প্রত্যেকটি কীভাবে ব্যবহার করতে হয় তা আপনাকে দেখাব।







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 () উদাহরণের মতো একই আউটপুট পাই।

সুতরাং, আপনি লিনাক্সে সিস্টেম প্রোগ্রামিংয়ের জন্য সি -তে এক্সিকিউশন ফাংশন পরিবার ব্যবহার করেন। এই নিবন্ধটি পড়ার জন্য ধন্যবাদ।