ফর্কের সাথে কোডিং এবং সি এর উদাহরণ দ্বারা এক্সিকিউট

Coding With Fork Exec Example C



আমাদের নিবন্ধের শিরোনামে C ভাষার দুটি ভিন্ন ফাংশন রয়েছে যা আমাদের সিস্টেমে যে কোন প্রোগ্রাম চালানোর সময় ঘটে। দুর্ভাগ্যবশত, সি -তে একবারে একাধিক প্রোগ্রাম হওয়ার সম্ভাবনা নেই। এটি আপনাকে একটি প্রক্রিয়া সম্পন্ন করার জন্য অন্য প্রক্রিয়াটি সম্পন্ন করার জন্য অপেক্ষা করতে বাধ্য করে। এই সমস্যা সমাধানের সমস্যাটি এড়ানোর জন্য, আপনার ডেভেলপার হওয়ার জন্য আপনাকে আপনার প্রোগ্রামটি একটি ভাল উপায়ে বিকাশ করতে হতে পারে। লিনাক্স ফর্ক () অপেক্ষাকে কাটিয়ে ওঠার জন্য এবং আপনার সিস্টেমে একত্রীকরণের অনুমতি দিতে ব্যবহৃত হয়। এটি একটি নতুন প্রক্রিয়া ডুপ্লিকেট করতে সাহায্য করে এবং ডুপ্লিকেটেড প্রক্রিয়াকে কল করে একটি নতুন প্রক্রিয়া তৈরি করে। নতুন প্রক্রিয়াটি শিশু প্রক্রিয়া এবং আগের প্রক্রিয়াটিকে অভিভাবক প্রক্রিয়া বলা হয়।

যেখানে, এক্সিকিউট () ফাংশনটি বর্তমানের প্রোগ্রামকে নতুনের সাথে পরিবর্তন করতে ব্যবহৃত হয়। একটি প্রোগ্রাম বা ফাইলের বিষয়বস্তুতে সংশোধন করে এই প্রতিস্থাপন করা হয়। সুতরাং ফর্ক এবং এক্সিকিউটের মধ্যে বৈষম্য হল যে ফর্ক বিদ্যমান প্রক্রিয়া থেকে একটি নতুন প্রক্রিয়া তৈরি করে এবং এক্সিকিউটিভটি একটি নতুন তৈরি করে বিদ্যমান প্রোগ্রামটি প্রতিস্থাপন করতে ব্যবহৃত হয়।







পূর্বশর্ত

আপনার লিনাক্স সিস্টেমে যে কোন সি প্রোগ্রাম এক্সিকিউট করার জন্য আমাদের কিছু পূর্বশর্ত ইন্সটল করতে হবে। শর্টকাট পদ্ধতি Ctrl+Alt+T ব্যবহার করে টার্মিনালে যান। এখন ম্যান পেজ ইনস্টল করার জন্য নিচের কমান্ডগুলো লিখুন।



$sudoউপযুক্তইনস্টলmanpages-dev



এটি সমস্ত সংশ্লিষ্ট পৃষ্ঠাগুলি ইনস্টল করবে।





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

$sudoউপযুক্তইনস্টলজিসিসি



সি -তে এক্সিকিউটের সাথে কোডিং

যেহেতু আমরা লিনাক্সে ম্যান পেজ ইনস্টল করেছি, আমরা এক্সিকিউটের বিষয়ে বর্ণনা দেখতে নিম্নলিখিত কমান্ডটি ব্যবহার করব। প্রাথমিক নমুনা সিনট্যাক্স নিম্নরূপ:

বাক্য গঠন

Exec(পথের নাম/ফাইল, আর্গভি);

এখানে আমরা unistd.h হেডার ব্যবহার করেছি কারণ এতে exec ফাংশনের পরিবারের সকল তথ্য রয়েছে।

$মানুষ এক্সিকিউট

এখন উপরের উদ্ধৃত ছবিতে, আপনি এক্সিকিউটের প্রকারগুলি পর্যবেক্ষণ করতে পারেন। এগুলি exec ফাংশনের পরিবার। প্রতিটি একই ভিত্তি অনুসরণ করে একটি ভিন্ন ফাংশনের জন্য, exec।

উদাহরণ: এখন, আরও এগিয়ে, আমরা একটি উদাহরণের সাহায্যে exec এর কার্যকারিতা বর্ণনা করব। আমরা exec এর একটি ফাংশন দেখাবো যার কার্যকারিতা, যা execv। প্রথমত, আমরা .c এর এক্সটেনশন দিয়ে দুটি ফাইল তৈরি করব। তাদের সৃষ্টির পরে, আমরা তাদের মধ্যে সংশ্লিষ্ট কোডগুলি লিখব এবং ফলাফল দেখতে তাদের কার্যকর করব।

একটি ফাইলের নাম sample4.c বিবেচনা করুন। দয়া করে এটি খুলুন এবং নিম্নলিখিত কোডটি ব্যবহার করুন। এই কোডে, আমরা নিচের উদ্ধৃত একটি বিশেষ পদ্ধতিতে execv ব্যবহার করেছি।

Execv(/নমুনা 4 কপি, আর্গ);

প্রথম অংশে নতুন ডিরেক্টরি পাথ রয়েছে, এবং দ্বিতীয় অংশটি আমরা পাস করা একটি প্যারামিটার হিসাবে আর্গুমেন্ট অ্যারে দেখায়।

নমুনা 4.c

প্রথমত, আমরা বর্তমান প্রক্রিয়ার আইডি প্রিন্ট করেছি। দ্বিতীয়ত, আমরা শেষের জন্য NULL থাকার একটি অক্ষর অ্যারে তৈরি করেছি। তৃতীয়ত আমরা নমুনা 4 কপি ফাংশনকে ডেকেছি।

Sample4copy.c

যখন আমরা exec ফাংশন () কল করি, প্রক্রিয়া চিত্রটি পরিবর্তন করা হয়। নীচে উদ্ধৃত চিত্র নীচে sample4copy.c কোড দেখায়।

এখানে আমরা বর্তমান প্রক্রিয়ার আইডি পেতে শুধুমাত্র মুদ্রণ বিবৃতি ব্যবহার করেছি।

নিম্নলিখিত কোডগুলি ব্যবহার করে সংশ্লিষ্ট কোডগুলির আউটপুট পাওয়া যেতে পারে।

$ GCC – o sample4 sample4.c
$ GCC –o sample4copy sample4copy.c
$/নমুনা 4

যেমনটি আমরা পূর্বে বর্ণনা করেছি, GCC শব্দটি কোড কম্পাইল করার জন্য ব্যবহৃত হয় এবং কম্পাইল করার পর কোডটি সফলভাবে কার্যকর করা হয়।

চিত্র অনুযায়ী, sample4.c ফাইলের পিআইডি প্রথমে দেখানো হয়েছে কারণ এটি এক্সিকিউশন কল করার আগে ঘোষণা করা হয়েছিল। তারপর exec () ফাংশনটি বলা হওয়ার পরে, ফাইলের নমুনা 4copy.c এর উভয় প্রিন্ট স্টেটমেন্ট এক্সিকিউট করা হয় যেখানে getpid () প্রক্রিয়াটির আইডি পেতে ব্যবহৃত হয়।

গ একটি কাঁটা দিয়ে কোডিং

ফর্ক () ফাংশন পিতামাতার প্রক্রিয়া থেকে শিশু প্রক্রিয়া তৈরি করে। এটিতে দুটি শিরোনাম রয়েছে, যার মধ্যে কাঁটাচামচ তথ্য রয়েছে।

বাক্য গঠন:

Pid_t কাঁটা(শূন্য);

আমরা ব্যবহারে সাহায্যের জন্য ম্যান পেজ ব্যবহার করতে পারি

$মানুষকাঁটা

উদাহরণ: এখন একটি ফাইল sample3.c তৈরি করে একটি উদাহরণ বিবেচনা করুন। আমরা ফাইলের ভিতরে কোড লিখব। কোড অনুসারে, আমরা কাঁটাচামচকে ফোরক্র্যাঙ্ক হিসাবে স্থির করেছি।

নমুনা

আমরা শর্ত প্রয়োগ করতে if-else স্টেটমেন্ট ব্যবহার করেছি। ফর্ক () ধারণাটি বোঝার জন্য সহজ প্রিন্ট কমান্ডগুলি এখানে ঘোষণা করা হয়েছে। Forkrank প্রথমে 0 এবং তারপর -1 হিসাবে ঘোষণা করা হয়। একটি ফর্ক () দিয়ে, এখন দুটি প্রক্রিয়া রয়েছে যা একযোগে কাজ করছে। এক্সিকিউট উদাহরণে উপরে ব্যবহৃত একই কোড ব্যবহার করে আউটপুট পাওয়া যেতে পারে।

$ GCC –o sample3.c
$/নমুনা 3

আউটপুট দেখায় যে শিশু প্রক্রিয়াটি পিতামাতার চেয়ে আগে কার্যকর করা হয়েছিল যখন পিতামাতার প্রক্রিয়া অপেক্ষা করছিল। অপেক্ষা ফাংশনটি বোঝায় যে এটি পিতামাতার কাজকে অপেক্ষা করতে বাধ্য করে যতক্ষণ না সমস্ত শিশু প্রক্রিয়াগুলির মধ্যে একটি বন্ধ করা হয়।

ফর্ক এবং এক্সেক সিস্টেম সমষ্টিগতভাবে কল করে

এখানে আমরা sample1.c এবং sample2.c নামে দুটি ফাইল নেব। প্রথমে, sampl1.c ফাইলটি খুলুন এবং ছবিতে যে কোডটি সংযুক্ত করা আছে তা লিখুন। আমরা এখানে ফর্ক () সিস্টেম-কল ব্যবহার করেছি; যখন চাইল্ড প্রসেস তৈরি করা হয়, p 0 দিয়ে নির্ধারিত হবে।

নমুনা 1. গ

নমুনা 2. সি

উপরে আলোচনা করা উদাহরণগুলির অনুরূপ, নমুনা 2 ফাইলে এটিতে printf স্টেটমেন্ট থাকবে। Sample1.c তে, প্রথম প্রিন্ট কমান্ডটি প্রথমে এক্সিকিউট করা হয়, তারপর ফর্ক ফাংশন বলা হয়, যখন p == 0, তখন চাইল্ড পার্ট এক্সিকিউট করা হয় এবং sample2.c ফাইল চালানো হবে। আউটপুট উভয় ফাইল কম্পাইল করার জন্য GCC থাকবে। এখানে অভিভাবক sample1.c আইডি এবং sample2.c আইডি আলাদা কারণ তারা পিতামাতা এবং শিশু।

উপসংহার

এই নিবন্ধে, আমরা সহজেই ব্যবহার এবং ধারণাটি বুঝতে ফর্ক এবং এক্সিকিউট উভয়ই আলাদাভাবে এবং সম্মিলিতভাবে ব্যবহার করেছি। আমি আশা করি এই টিউটোরিয়ালে পর্যাপ্ত বিষয়বস্তু রয়েছে যা আপনার জ্ঞান বৃদ্ধিতে অ্যাক্সেসের দিকে পরিচালিত করবে।