ফাইল বর্ণনাকারী এবং কাঁটাচামচ


15

যখন কোনও শিশু কাঁটাচামচ করা হয় তখন এটি পিতামাতার ফাইল বর্ণনাকারীদের উত্তরাধিকার সূত্রে প্রাপ্ত হয়, যদি শিশু ফাইল বিবরণকারীটি বন্ধ করে দেয় তবে কী হবে? যদি বাচ্চারা লিখতে শুরু করে তবে পিতামাতার শেষে ফাইলটির কী হবে? কে এই অসঙ্গতিগুলি, কার্নেল বা ব্যবহারকারী পরিচালনা করে?

যখন কোনও প্রক্রিয়া closeফাইল বিবরণীর মাধ্যমে একটি নির্দিষ্ট ওপেন ফাইলটি বন্ধ করতে ফাংশনটিকে কল করে । প্রক্রিয়া ফাইল সারণীতে, রেফারেন্স গণনা এক দ্বারা হ্রাস করা হয়। তবে যেহেতু পিতামাতা এবং শিশু উভয়ই একই ফাইল ধারণ করে রেফারেন্স গণনাটি 2 হয় এবং বন্ধ হওয়ার পরে এটি হ্রাস হয় 1 এ। যেহেতু এটি শূন্য নয় প্রক্রিয়াটি এখনও কোনও সমস্যা ছাড়াই ফাইল ব্যবহার করা অবিরত করে।

টেরেন্স চ্যান ইউএনআইএক্স সিস্টেম প্রোগ্রামিং দেখুন, (ফাইলগুলির জন্য ইউনিক্স কার্নেল সমর্থন)।


ঠিক আছে, যে গত মন্তব্য কিছু মনে করবেন না;) জন্য মানুষ পৃষ্ঠাগুলি open()এবং fork()সেখানে একটি মধ্যে একটি পার্থক্য হল ফাইল descript-অথবা একটি ফাইল descipt-আয়ন - সাবেক পরে উল্লেখ করে, এবং যদিও একটি কাঁটাচামচ মধ্যে বর্ণনাকারী কপি, তারা একই বর্ণনা উল্লেখ। যাইহোক, পরীক্ষিত হলে এটি সুস্পষ্ট যে এর অর্থ এই নয় যে সন্তানের হ্যান্ডেলটি বন্ধ করা পিতামাতার হাতল বন্ধ করে দেয়। আমি মনে করি উভয় হ্যান্ডলগুলি লেখার সময় এটি ডেটা ইন্টারলাইভিংয়ে একটি সূক্ষ্ম পার্থক্য আনতে পারে - তবে এটি যেভাবেই হোক অনির্ধারিত, তাই ঠিক কীভাবে ঘটে তা এত গুরুত্বপূর্ণ নয়।
স্বর্ণলোকস

উত্তর:


29

যখন কোনও শিশু কাঁটাচামচ করা হয় তখন এটি পিতামাতার ফাইল বর্ণনাকারীদের উত্তরাধিকার সূত্রে প্রাপ্ত হয়, যদি শিশু ফাইল বিবরণকারীটি বন্ধ করে দেয় তবে কী হবে?

এটি ফাইল বর্ণনাকারীর একটি অনুলিপি উত্তরাধিকার সূত্রে প্রাপ্ত । সুতরাং সন্তানের মধ্যে বর্ণনাকারীটি বন্ধ করা সন্তানের জন্য এটি বন্ধ করে দেবে, তবে পিতামাতার নয় এবং তদ্বিপরীত।

যদি বাচ্চারা লিখতে শুরু করে তবে পিতামাতার শেষে ফাইলটির কী হবে? কে এই অসঙ্গতিগুলি, কার্নেল বা ব্যবহারকারী পরিচালনা করে?

এটি হুবহু (ঠিক তেমন আক্ষরিকভাবে) একই ফাইলটিতে দুটি প্রক্রিয়া লেখার মতো। কার্নেলটি প্রক্রিয়াগুলি স্বাধীনভাবে সময়সূচী করে, তাই আপনি সম্ভবত ফাইলটিতে আন্তঃবিস্তারিত ডেটা পাবেন।

যাইহোক, পসিক্স (যার কাছে * নিক্স সিস্টেমগুলি মূলত বা সম্পূর্ণরূপে মেনে চলে), সিপিআইপি থেকে যেগুলি read()এবং write()ফাংশনগুলি (সিস্টেম কলগুলিতে কোন মানচিত্রটি থাকে) "নিয়মিত ফাইলগুলিতে অপারেট করার সময় একে অপরের প্রতি সম্মানজনক [...] হয় প্রতীকী লিঙ্ক "। জিএনইউ সি ম্যানুয়ালি পাইপের ক্ষেত্রেও অস্থায়ীভাবে এই প্রতিশ্রুতি দেয় (ডিফল্টটি নোট করুন PIPE_BUF, যা প্রোভিসোর অংশ, ki৪ কিবি)। এর অর্থ হ'ল অন্যান্য ভাষা / সরঞ্জামগুলিতে কলগুলি, যেমন ব্যবহার echoবা এর ব্যবহারকে catসেই চুক্তিতে অন্তর্ভুক্ত করা উচিত, সুতরাং যদি দুটি স্বতন্ত্র প্রক্রিয়া একই পাইপে একই সাথে "হ্যালো" এবং "ওয়ার্ল্ড" লেখার চেষ্টা করে তবে অন্যটি কী প্রকাশ পাবে শেষটি হয় "হেলিওরল্ড" বা "ওয়ার্ল্ডহেলো" এবং কখনও "এর মতো কিছু হয় না"

যখন কোনও প্রসেস কল ক্লোজ ফাংশনটি ফাইল ডেস্ক্রিপ্টরের মাধ্যমে কোনও নির্দিষ্ট ওপেন ফাইলটি বন্ধ করে দেয় process প্রক্রিয়া ফাইলের টেবিলটি রেফারেন্স গণনাটিকে এক দ্বারা হ্রাস করে ut তবে পিতামাতা এবং শিশু উভয়ই একই ফাইল ধারণ করে (সেখানে রেফারেন্স গণনা 2 হয় এবং বন্ধ হওয়ার পরে এটি হ্রাস পায়) 1) যেহেতু এটি শূন্য নয় তাই প্রক্রিয়া এখনও কোনও সমস্যা ছাড়াই ফাইল ব্যবহার করা চালিয়ে যায়।

TWO প্রক্রিয়া রয়েছে, পিতামাতা এবং শিশু। তাদের উভয়ের পক্ষে কোনও "রেফারেন্স কাউন্ট" সাধারণ নেই। তারা স্বাধীন। ডাব্লুআরটি যখন তাদের মধ্যে একটি ফাইল বর্ণনাকারী বন্ধ করে তখন কী হয়, প্রথম প্রশ্নের উত্তর দেখুন।


1

যখনই fork()একটি নতুন শিশু তৈরি করে, ফাইল বর্ণনাকারীদের মোটেই ধরে রাখা হয় না - সেগুলি পরিবর্তন করা হয়।

যদিও ফাইলটি নকল হবে, তবে এটির একটি আলাদা ফাইল বর্ণনাকারী থাকবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.