আপনার প্রশ্নটি বনের উত্তর চেয়েছিল বলে মনে হয়েছিল, এবং এখানে উত্তরগুলি গাছের উত্তরের মতো মনে হচ্ছে, তাই আমি ভেবেছিলাম যে আমি আপনাকে একটি বন উত্তর দেব।
এটি সি প্রোগ্রামগুলি কীভাবে লেখা হয় তা খুব কমই হয়। এটি সর্বদা শেল স্ক্রিপ্টগুলি কীভাবে লেখা হয় এবং কখনও কখনও পাইথন, পার্ল বা রুবি প্রোগ্রামগুলি কীভাবে লেখা হয় তা is
সিস্টেম গ্রন্থাগারগুলির সহজ ব্যবহার এবং ওএস সিস্টেম কলগুলিতে সরাসরি নিম্ন স্তরের অ্যাক্সেসের পাশাপাশি গতির জন্য লোকেরা সিতে সাধারণত লেখেন। এবং সি লিখতে একটি কঠিন ভাষা, সুতরাং লোকেরা যদি এই জিনিসগুলির প্রয়োজন না হয় তবে তারা সি ব্যবহার করে না Also এছাড়াও সি প্রোগ্রামগুলি সাধারণত ভাগ করা লাইব্রেরি এবং কনফিগারেশন ফাইলগুলির উপর নির্ভরতা রাখার প্রত্যাশা করে।
উপ-প্রক্রিয়াতে শেলিং করা বিশেষত দ্রুত নয়, এবং এটি নিম্ন-স্তরের সিস্টেম সুবিধাগুলিতে সূক্ষ্ম দানাযুক্ত এবং নিয়ন্ত্রিত অ্যাক্সেসের প্রয়োজন হয় না এবং এটি একটি বাহ্যিক নির্বাহযোগ্যের উপর সম্ভবত অবাক করা নির্ভরশীলতার পরিচয় দেয়, তাই এটি দেখার বিষয়টি অস্বাভাবিক নয় see সি প্রোগ্রামে।
কিছু অতিরিক্ত উদ্বেগ আছে। লোকেরা যে সুরক্ষা এবং বহনযোগ্যতার উদ্বেগ প্রকাশ করেছে তা সম্পূর্ণ বৈধ। এগুলি অবশ্যই শেল স্ক্রিপ্টগুলির জন্য সমানভাবে বৈধ, তবে লোকেরা শেল স্ক্রিপ্টগুলিতে এই জাতীয় সমস্যা আশা করে। তবে সি প্রোগ্রামগুলি সাধারণত এই শ্রেণীর সুরক্ষা উদ্বেগের আশা করে না, যা এটি আরও বিপজ্জনক করে তোলে।
তবে, আমার মতে, সবচেয়ে বড় উদ্বেগ যেভাবে করা উচিত popen
তা আপনার বাকি প্রোগ্রামের সাথে ইন্টারঅ্যাক্ট করবে। popen
একটি শিশু প্রক্রিয়া তৈরি করতে হবে, এর আউটপুটটি পড়তে হবে এবং তার প্রস্থান স্থিতি সংগ্রহ করতে হবে। এরই মধ্যে, সেই প্রক্রিয়াটির স্ট্যাডার আপনার প্রোগ্রামের মতো একই স্ট্যাডারের সাথে সংযুক্ত থাকবে, যা বিভ্রান্তিকর আউটপুট তৈরি করতে পারে এবং এর স্টিডিনটি আপনার প্রোগ্রামের মতোই হবে, যা অন্যান্য আকর্ষণীয় সমস্যার কারণ হতে পারে। আপনি যে </dev/null 2>/dev/null
স্ট্রিংটি popen
শেল দ্বারা ব্যাখ্যা করা হয়েছে তাতে অন্তর্ভুক্ত করে আপনি এটি সমাধান করতে পারেন ।
এবং popen
একটি শিশু প্রক্রিয়া তৈরি করে। আপনি যদি সিগন্যাল হ্যান্ডলিং বা নিজেকে কাঁটা প্রক্রিয়া দিয়ে কিছু করেন তবে আপনি বিজোড় SIGCHLD
সংকেত পেতে পারেন । আপনার কলগুলি wait
অদ্ভুতভাবে ইন্টারঅ্যাক্ট করতে পারে popen
এবং সম্ভবত অদ্ভুত বর্ণের পরিস্থিতি তৈরি করতে পারে।
সুরক্ষা এবং বহনযোগ্যতা উদ্বেগ অবশ্যই আছে। যেমন এটি শেল স্ক্রিপ্ট বা এমন কোনও কিছুর জন্য যা সিস্টেমে অন্য এক্সিকিউটেবল শুরু করে। আর তুমি সাবধান আপনার প্রোগ্রাম ব্যবহার মানুষ স্ট্রিং আপনি মধ্যে পাস মধ্যে শেল মেটা-charcaters পেতে সক্ষম হয় না হতে হবে popen
কারণ যে স্ট্রিং সরাসরি দেওয়া হয় sh
সঙ্গে sh -c <string from popen as a single argument>
।
তবে আমি মনে করি না যে তারা কেন সি প্রোগ্রাম ব্যবহার করে দেখতে অবাক লাগে popen
। এটি আশ্চর্যের কারণ হ'ল সি সাধারণত নিম্ন স্তরের ভাষা এবং popen
নিম্ন স্তরের নয়। এবং popen
আপনার প্রোগ্রামে জায়গাগুলির নকশার সীমাবদ্ধতার কারণ এটি আপনার প্রোগ্রামের স্ট্যান্ডার্ড ইনপুট এবং আউটপুটটির সাথে অদ্ভুতভাবে ইন্টারেক্ট করবে এবং এটি আপনার নিজের প্রক্রিয়া পরিচালনা বা সিগন্যাল হ্যান্ডলিংয়ে ব্যথা করে। এবং কারণ সি প্রোগ্রামগুলি সাধারণত বাহ্যিক এক্সিকিউটেবলের উপর নির্ভরতা রাখে বলে আশা করা যায় না।