সি-তে লিনাক্স পপেন সিস্টেম কল

Si Te Linaksa Papena Sistema Kala



' popen() ফাংশন স্ট্রিং কমান্ড দ্বারা প্রদত্ত কমান্ড বহন করবে। ফাংশনটি এমন একটি স্ট্রীমে একটি পয়েন্টার ফিরিয়ে আনতে হবে যা পাইপে পড়তে বা লিখতে ব্যবহৃত হয় এবং কলিং অ্যাপ্লিকেশন এবং এক্সিকিউটেড কমান্ডের মধ্যে একটি পাইপ তৈরি করে। Popen ফাংশনটি I/O ফাংশনের স্ট্যান্ডার্ড লাইব্রেরিতে পাওয়া যায় এবং একটি টার্মিনাল কমান্ড চালানোর জন্য একটি দ্বিতীয় প্রক্রিয়া তৈরি করে। popen() এর ওপেন ফেজ fopen() ফাংশনের ওপেন ফেজ এর মতই। popen() ফাংশন কাঁটাচামচ, একটি পাইপ নির্মাণ এবং শেল কার্যকর করার মাধ্যমে একটি প্রক্রিয়া শুরু করে। যেহেতু একটি পাইপ ডিফল্টরূপে একমুখী হয়; ফলস্বরূপ, স্ট্রীম হয় শুধুমাত্র-পঠন বা শুধুমাত্র-লেখা। popen() ফাংশন সফলভাবে সঞ্চালনে, একটি ওপেন স্ট্রিম পাওয়া যায় যা পাইপ পড়ার এবং লেখার জন্য ব্যবহৃত হয়।'

উদাহরণ 1

নিম্নলিখিত উদাহরণ প্রোগ্রামের সাহায্যে, আমরা পপেন সিস্টেম কল ব্যবহার করে বর্তমান ডিরেক্টরি বা ফোল্ডারে বিদ্যমান ফাইলগুলি পড়ব। প্রথমত, আমরা C স্ট্যান্ডার্ড লাইব্রেরির stdio.h হেডার ফাইল ইনপুট করেছি। তারপর, আমাদের একটি প্রোগ্রাম int main() ফাংশন আছে যেখানে আমরা popen ফাংশন স্থাপন করেছি। এর আগে, আমরা 'ফাইল' ক্লাস থেকে পয়েন্টার ভেরিয়েবল 'ফাইলওপেন' প্রতিষ্ঠা করেছি। ফাইলের পয়েন্টার ভেরিয়েবল পাঠ বা লেখার জন্য পরবর্তী বাইট নির্দেশ করে।







এর পরে, আমরা পড়ার জন্য অক্ষরের সীমা মান নির্ধারণ করেছি। ভেরিয়েবল 'ফাইলওপেন' তারপর 'পোপেন' ফাংশনটি চালু করেছে। 'পপেন' ফাংশনটি লিনাক্সের 'ls -l' কমান্ড নেয়, যা বর্তমান ডিরেক্টরির সমস্ত ফাইল তালিকাভুক্ত করবে। তাছাড়া, আমরা পপেন ফাংশনে 'r' প্যারামিটার ইনপুট করেছি, যা রিড মোড নির্দেশ করে।



এখানে, আমরা popen ফাংশন ব্যবহার করে ফাইল পড়ার প্রক্রিয়া পাইপ করেছি। এরপর, আমরা তৈরি পাইপটিকে while লুপ দিয়ে প্রক্রিয়া করি। while লুপ fgets পদ্ধতি ব্যবহার করে, যা আর্গুমেন্ট নেয় “লাইন”, “লাইনের সাইজ” এবং “ফাইলওপেন”। fgets পাইপ করা প্রক্রিয়াটি পড়ে এবং এটিকে স্ট্রিং এর '%s' প্রতীকে সংরক্ষণ করে। এই নির্দিষ্ট চিহ্নটিকে 'লাইন' আর্গুমেন্ট সহ printf পদ্ধতির ভিতরে বলা হয়। আমরা একবার প্রক্রিয়াকৃত পাইপ তৈরি করলে, pclosed ফাংশন সহ, পাইপযুক্ত প্রক্রিয়াটি নীচের প্রোগ্রামের শেষে স্থাপন করা হিসাবে বন্ধ করা যেতে পারে।



# অন্তর্ভুক্ত করুন


int প্রধান ( )

{

ফাইল * খোলা ফাইল;

চার লাইন [ 130 ] ;


ফাইল ওপেন = popen ( 'ls -l' , 'আর' ) ;

যখন ( fgets ( লাইন, সাইজ অফ লাইন, ফাইল ওপেন ) )

{

printf ( '%s' , লাইন ) ;

}

pclose ( খোলা ফাইল ) ;

}





সি প্রোগ্রামের পোপেন ফাংশন উপরের প্রক্রিয়াটিকে কাঁটাচামড়া করে এবং তারপর পাইপ তৈরি করে। এখন, আমরা C কম্পাইলেশন কমান্ডের সাহায্যে শেলের মধ্যে স্ট্রিমের প্রক্রিয়াকৃত পাইপটি কার্যকর করেছি। আউটপুট 'হোম' ডিরেক্টরিতে সমস্ত ফাইল তালিকাভুক্ত করেছে কারণ আমরা সেই ডিরেক্টরিতে প্রোগ্রামটি কার্যকর করেছি।



উদাহরণ 2

পূর্ববর্তী পোপেন প্রোগ্রামে, আমাদের কাছে পোপেন প্রোগ্রামের কার্যকারিতার একটি সাধারণ প্রদর্শন রয়েছে যা ফাইল পড়ার স্ট্রিমিং প্রক্রিয়া পাইপ করার জন্য ব্যবহৃত হয়। এখন, আমরা popen ফাংশনের আরেকটি উদাহরণ নিয়েছি যেখানে আমরা রাইট মোড দিয়ে প্রক্রিয়াটি পাইপ করেছি। মূল ফাংশন সহ প্রোগ্রামটি বিবেচনা করা যাক। আমরা মূল ফাংশনের ভিতরে ফাইল পয়েন্টার ভেরিয়েবলটিকে 'ফাইল' হিসাবে তৈরি করেছি। ফাইল পয়েন্টার popen ফাংশন সঙ্গে স্থাপন করা হয়.

পোপেন ফাংশনটি 'বিড়াল' কমান্ড এবং লেখার মোডের জন্য 'w' নেয়। এখানে, প্রতিটি ফাইল আর্গুমেন্ট ক্রমানুসারে পড়া হয় এবং cat কমান্ডের মাধ্যমে স্ট্যান্ডার্ড আউটপুটে পাঠানো হয়। for loop বডিতে, আমরা fprintf ফাংশনটি ব্যবহার করেছি সাংখ্যিক গণনার মান প্রিন্ট করার জন্য যেমন আমরা '%d' চিহ্নটি নির্দিষ্ট করেছি। তারপর বন্ধ, popen পাইপ প্রক্রিয়া pclose সিস্টেম কল সঙ্গে.

# অন্তর্ভুক্ত করুন


int প্রধান ( int argc, char ** argv ) {

ফাইল * ফাইল = পোপেন ( 'বিড়াল' , 'ভিতরে' ) ;

int x = 0 ;


জন্য ( এক্স = 0 ;এক্স < 5 ;x++ ) {


fprintf ( ফাইল , 'আমার গণনা = %d \n ' , এক্স ) ;
}

pclose ( ফাইল ) ;

প্রত্যাবর্তন 0 ;

}

যখন আমরা উপরে তৈরি প্রক্রিয়াটি কার্যকর করি, তখন এটি নিম্নলিখিত পদ্ধতিতে গণনা মানগুলি মুদ্রণ করে।

উদাহরণ 3

এখন, আমাদের আরেকটি প্রোগ্রাম আছে যা একটি প্রক্রিয়ার ডেটা অন্য প্রক্রিয়ায় স্থানান্তর করে। আমরা popen ফাংশন থেকে পাইপ দিয়ে এটি করব। আমরা সি এর স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার করে প্রোগ্রামটি বাস্তবায়ন করেছি। তারপর, একটি প্রোগ্রাম স্থাপনের জন্য আমাদের একটি int প্রধান ফাংশন রয়েছে। এখানে, আমরা 'buffer' আর্গুমেন্ট সহ sprintf ফাংশনে স্ট্রিং নির্দিষ্ট করেছি। sprintf() ফাংশন প্রম্পটে পাঠানোর পরিবর্তে sprintf দ্বারা প্রদত্ত char বাফারে ফলাফল রাখে।

এর পরে, আমরা 'রিড' ভেরিয়েবলের ভিতরে পোপেন ফাংশনকে কল করি। সেখানে, আমাদের popen ফাংশনের ভিতরে দুটি প্রক্রিয়া আছে। 'wc -c' হল প্রথম প্রক্রিয়া যা প্রদত্ত অক্ষর গণনা করতে ব্যবহৃত হয়, এবং দ্বিতীয় প্রক্রিয়াটি হল 'w' যা নির্দেশ করে যে পাইপটি লেখার মোডে খোলা আছে। এর পরে, আমাদের কাছে 'fwrite' ফাংশন রয়েছে যা ডেটা লিখতে পাইপ ব্যবহার করে। ডেটা 'wc' দ্বারা গৃহীত হবে, তারপর অক্ষর গণনা করা হবে এবং শেলে প্রদর্শিত হবে।

#include

#include

#include

#include

int প্রধান ( )

{

ফাইল * পড়া ;

চার বাফার [ পঞ্চাশ ] ;

sprintf ( বাফার 'লিনাক্স সিস্টেম কল' ) ;

পড়া =পোপেন ( 'wc -c' , 'ভিতরে' ) ;

fwrite ( বাফার, আকার ( চর ) ,স্ট্রলেন ( বাফার ) , পড়া ) ;

pclose ( পড়া ) ;

}

প্রম্পটে প্রদর্শিত অক্ষরগুলি হল '17' কারণ আমরা উপরে যে স্ট্রিংটি উল্লেখ করেছি তাতে '17' অক্ষর রয়েছে। 'wc -c' প্রক্রিয়া এই অক্ষরগুলি পড়ে এবং একটি আউটপুট হিসাবে তাদের প্রিন্ট করে।

উদাহরণ 4

পপেনের উপরের উদাহরণটি একটি প্রক্রিয়া থেকে অন্যটিতে ডেটা প্রেরণ করে। এখানে, আমরা পাইপের মাধ্যমে একটি প্রক্রিয়া থেকে অন্য প্রক্রিয়ায় ডেটা গ্রহণ করব। প্রোগ্রামটির প্রধান কাজ হল বাফার তৈরি করা, যা '50' মান নেয়। তারপর, আমরা 'r' ভেরিয়েবল তৈরি করেছি যেখানে পপেন ফাংশন প্রক্রিয়াটি তৈরি করেছে। 'ls' প্রক্রিয়াটি ডিরেক্টরির ফাইলগুলি তালিকাভুক্ত করতে এবং পাইপ থেকে ডেটা পড়ার জন্য 'r' প্রক্রিয়া ব্যবহার করা হয়। 'ls' প্রক্রিয়াটি পড়ার জন্য 'r' প্রক্রিয়াতে ডেটা প্রেরণ করে। এর পরে, আমাদের কাছে ফ্রেড ফাংশন রয়েছে, যা ডেটা পড়ে এবং বাফারে ডেটা সংরক্ষণ করে। তারপর, প্রিন্ট স্টেটমেন্ট বাফারে সংরক্ষিত ডেটা প্রিন্ট করবে।

#include

#include

#include

#include

int প্রধান ( )

{

ফাইল * r;

চার বাফার [ পঞ্চাশ ] ;


r = popen ( 'লস' , 'আর' ) ;

fread ( বাফার 1 , 25 , আর ) ;


printf ( '%s \n ' , বাফার ) ;

pclose ( r ) ;

}

এখানে বিদ্যমান ফাইলগুলির শুধুমাত্র '50' অক্ষরগুলি কার্যকারী ডিরেক্টরি থেকে প্রদর্শিত হয়। অতএব, আউটপুটে শুধুমাত্র 50টি অক্ষর থাকবে।

উপসংহার

আমরা সি ল্যাঙ্গুয়েজে লিনাক্স পপেন সিস্টেম কলের বিস্তারিত প্রদর্শন করেছি। আমরা চারটি উদাহরণ প্রয়োগ করেছি যেখানে আমরা পোপেন ফাংশন স্থাপন করেছি। popen ফাংশন আমাদের নির্ধারিত মোড অনুযায়ী পাইপ স্ট্রীম প্রদান করে। উদাহরণগুলিতে, আমরা ফাইল হ্যান্ডলিং ফাংশন fread এবং fwrite সহ রিড এবং রাইট উভয় মোড ব্যবহার করেছি। আমরা প্রথম আর্গুমেন্ট হিসেবে popen() ফাংশনে প্রোগ্রামটির নাম ব্যবহার করেছি। দ্বিতীয় আর্গুমেন্ট হল একটি ফাইল 'r' রিড হিসাবে বা 'w' লেখার মোড হিসাবে।