লিনাক্সে একটি সিস্টেম কল কী এবং এটি উদাহরণ সহ কীভাবে কাজ করে

What Is System Call Linux



একটি সিস্টেম কল একটি ফাংশন যা একটি প্রক্রিয়াকে লিনাক্স কার্নেলের সাথে যোগাযোগ করতে দেয়। এটি একটি কম্পিউটার প্রোগ্রামের অপারেটিং সিস্টেমের কার্নেল থেকে একটি সুবিধা অর্ডার করার জন্য একটি প্রোগ্রাম্যাটিক উপায়। সিস্টেম কলগুলি একটি API (অ্যাপ্লিকেশন প্রোগ্রামিং ইন্টারফেস) এর মাধ্যমে ব্যবহারকারী প্রোগ্রামগুলির কাছে অপারেটিং সিস্টেমের সম্পদ প্রকাশ করে। সিস্টেম কলগুলি কেবল কার্নেল ফ্রেমওয়ার্ক অ্যাক্সেস করতে পারে। যে সকল পরিষেবার জন্য সম্পদের প্রয়োজন তার জন্য সিস্টেম কল প্রয়োজন।

লিনাক্স কার্নেল হল মালিকানাধীন সফটওয়্যার যা ডিভাইসে লোড হয় এবং কমপক্ষে সম্ভাব্য পর্যায়ে কাজ করে। এর কাজ হল মেশিনে কিবোর্ড, ডিস্ক ড্রাইভ এবং নেটওয়ার্ক ইভেন্ট থেকে শুরু করে বিভিন্ন কর্মসূচির একসাথে বাস্তবায়নের জন্য সময় স্লাইস প্রদান করা সব আয়োজন করা। সফ্টওয়্যার এবং হার্ডওয়্যার পৃথকীকরণ একটি নিরাপদ বুদ্বুদ তৈরি করে যা সুরক্ষা এবং নির্ভরযোগ্যতা উন্নত করে। সুবিধাবঞ্চিত অ্যাপ্লিকেশনগুলি অন্য প্রোগ্রামের স্টোরেজে পৌঁছাতে অক্ষম, এবং যদি একটি ব্যর্থ হয়, কার্নেল প্রক্রিয়াটি স্থগিত করে যাতে এটি পুরো সিস্টেমের ক্ষতি না করে।







ওয়েফার পাতলা মোড়ক:

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



  • খোলা
  • বন্ধ
  • Exec
  • লিখুন
  • পড়ুন
  • লিসেক
  • নির্বাচন করুন

আসুন আমরা আমাদের নিবন্ধে C ভাষা ব্যবহার করে লিনাক্স সিস্টেম কলগুলির কিছু নিয়ে আলোচনা করি।



সিস্টেম কল খুলুন:

আমরা আমাদের লিনাক্স ডিস্ট্রিবিউশনে ওপেন সিস্টেম কল ব্যবহার করে ডকুমেন্টটি দ্রুত খুলতে পারি, যা আমরা আমাদের সি ভাষার কোডে উল্লেখ করব। প্রথমে কমান্ড টার্মিনাল চালু করুন। আপনি Ctrl+Alt+T শর্টকাট ব্যবহার করতে পারেন। ধরুন আপনার হোম ডিরেক্টরিতে test.txt একটি টেক্সট ফাইল আছে এবং এতে কিছু কন্টেন্ট আছে। সুতরাং, শুরুতে, আপনাকে ন্যানো এডিটরের মাধ্যমে টার্মিনালে একটি নতুন সি টাইপ ফাইলের নাম new.c তৈরি করতে হবে। অতএব, নীচের সহজ ন্যানো নির্দেশটি চেষ্টা করুন।





$ন্যানোনতুন সি

এখন, ন্যানো সম্পাদক চালু করা হয়েছে। এতে নিচের দেখানো কোড টাইপ করুন। আমাদের কোডে দুটি ফাইল বর্ণনাকারী রয়েছে। উভয় ফাইল ওপেন সিস্টেম কল ব্যবহার করে খোলা যাবে। প্রথম বর্ণনাকারীর একটি রিড কল ​​আছে, এবং দ্বিতীয়টিতে লেখা ফাংশন রয়েছে। প্রথম ওপেন কল টেক্সট ফাইল test.txt খুলছে এবং এর বিষয়বস্তু ফাইল ডিস্ক্রিপ্টর এফডি তে সংরক্ষণ করছে। দ্বিতীয় ওপেন সিস্টেম কল হচ্ছে টার্গেট নামে একটি ফাইল তৈরি করা। ডকুমেন্ট টার্গেট একটি fd1 ফাইল বর্ণনাকারীকে ফেরত দেওয়া হয়েছে। লেখার নির্দেশটি বাফারে ডেটার বাইট প্রতিলিপি করতে ব্যবহৃত হয়। কোডটি সংরক্ষণ করতে Ctrl+S আলতো চাপুন এবং ফাইলটি ছাড়তে শর্টকাট কী Ctrl+X চাপুন।



এই সি কোড কম্পাইল করার জন্য gcc কম্পাইল নির্দেশ চালান।

$gccনতুন সি

আসুন শেলের সহজ a.out ক্যোয়ারী ব্যবহার করে কোডটি কার্যকর করি:

$/a. আউট

আউটপুট ডেটা ফাইল টার্গেটে প্রেরণ করা হয়েছে। বিড়ালের প্রশ্ন ব্যবহার করে লক্ষ্য ফাইলটি পরীক্ষা করা যাক। আউটপুট স্ক্রিন টার্গেট ফাইলে 20 অক্ষরের ডেটা দেখাচ্ছে।

$বিড়াললক্ষ্য

এক্সিক সিস্টেম কল:

বর্তমানে প্রক্রিয়াধীন একটি ফাইল চালানোর জন্য এক্সিকিউটিভ সিস্টেম কল বন্ধ করা হচ্ছে। প্রাক্তন এক্সিকিউটেবল ফাইলটি প্রতিস্থাপিত হয় এবং যখনই এক্সিকিউট বলা হয় তখন বর্তমান ফাইলটি পরিচালিত হয়। একটি এক্সিকিউটিভ সিস্টেম কল ব্যবহার করে, আমরা ধরে নিতে পারি যে এটি করলে পুরানো ডকুমেন্ট বা অ্যাপ্লিকেশনটি নতুন করে লুপে ওভাররাইট হবে। নতুন সফটওয়্যার পুরো প্রক্রিয়ার উপাদানকে ওভাররাইড করতে ব্যবহৃত হয়। ডকুমেন্ট যার শিরোনাম বিবৃতিতে দেওয়া হয় যখনই invoking exec () ব্যবহারকারীর তথ্য বিভাগের জন্য প্রতিস্থাপিত হয় যা exec () সিস্টেম কল () চালায়। সুতরাং কমান্ড টার্মিনাল খুলুন এবং, ন্যানো এডিটর ব্যবহার করে, নিম্নরূপ একটি নতুন সি টাইপ ফাইল তৈরি করুন:

$ন্যানোexp.c

সম্পাদক এখন খোলা হয়েছে। এতে নিচের সি ল্যাঙ্গুয়েজ কোডটি লিখুন। এর মধ্যে তিনটি প্রধান গ্রন্থাগার অন্তর্ভুক্ত রয়েছে। এর পরে, মূল ফাংশনটি তাত্ক্ষণিকভাবে চালু করা হয়েছে। মুদ্রণ বিবৃতিটি স্ট্রিং ডেটা এবং ফাইলের প্রসেস আইডি exp.c. Getpid () ফাংশন এই উদ্দেশ্যে ব্যবহার করা হয়েছে। তারপরে আমাদের একটি অক্ষর টাইপ অ্যারে রয়েছে যার মধ্যে কিছু মান রয়েছে। এক্সিকিউটিভ সিস্টেম কলটি যুক্তি হিসাবে ফাইলের নাম এবং উপরের সারির এক-লাইন নিতে ব্যবহৃত হয়েছে। এখন hello.c ফাইলটি প্রসেস করা হবে। এর পরে, আরেকটি মুদ্রণ বিবৃতি এতদূর আসে, কিন্তু এটি কখনও কার্যকর করা হবে না। এই ফাইলটি সংরক্ষণ করতে Ctrl+S চাপুন। প্রস্থান করতে Ctrl+X চাপুন।

এখন সময় এসেছে ন্যানো এডিটর ব্যবহার করে আরেকটি c ফাইল, hello.c তৈরি করার। এটি করার জন্য শেলের নীচের প্রশ্নটি ব্যবহার করুন।

$ন্যানোhello.c

এতে নিচের কোডটি লিখুন। এই কোডটিতে প্রধান ফাংশনে দুটি মুদ্রণ বিবৃতি রয়েছে। প্রথমটি কেবল একটি দেওয়া স্ট্রিং মুদ্রণ করছে, এবং দ্বিতীয়টি বর্তমানে ব্যবহৃত ফাইলের প্রসেস আইডি আনার সময় স্ট্রিংটি মুদ্রণ করছে, যা hello.c।

Gcc ব্যবহার করে একের পর এক ফাইল দুটি কম্পাইল করা যাক।

$gccExpo exp exp.c

$gcc–ও হ্যালো হ্যালো.সি

যখন আমরা exp.c ফাইলটি এক্সিকিউট করি, তখন এটি exp.c ফাইল থেকে প্রথম মুদ্রণ বিবৃতি এবং hello.c ফাইল থেকে উভয় প্রিন্ট লাইন বের করবে।

$/মেয়াদ শেষ

উপসংহার:

আমরা লিনাক্স সিস্টেম কলগুলির সম্পূর্ণ ধারণা এবং সেগুলি কীভাবে আপনার লিনাক্স সিস্টেমে ব্যবহার করা যায় সে সম্পর্কে বিস্তারিত বর্ণনা করেছি। এই ধারণাটি বাস্তবায়নের সময় আমরা উবুন্টু 20.04 ব্যবহার করেছি।