আমি সন্দেহ করি যে ইউনিক্স (এবং ফলস্বরূপ লিনাক্স) আকারের দৃষ্টিভঙ্গি / ডিজাইনের সাথে কেন অনেক কিছু আছে এবং এর থেকে প্রাপ্ত সুবিধাগুলি।
কোনও সন্দেহ নেই যে অতিরিক্ত প্রক্রিয়া না ঘটাতে একটি অ-তুচ্ছ পারফরম্যান্স বেনিফিট রয়েছে, তবে আমি মনে করি এটির আরও অনেক কিছুই আছে: প্রথমদিকে ইউনিক্সের একটি "সমস্ত কিছু একটি ফাইল" রূপক ছিল, যা যদি আপনি তাকান তবে একটি অ-সুস্পষ্ট তবে মার্জিত সুবিধা রয়েছে এটি শেল স্ক্রিপ্টিং দৃষ্টিকোণের পরিবর্তে সিস্টেমের দৃষ্টিভঙ্গি থেকে।
বলুন আপনার কাছে আপনার null
কমান্ড-লাইন প্রোগ্রাম এবং /dev/null
ডিভাইস নোড রয়েছে। শেল-স্ক্রিপ্টিং দৃষ্টিকোণ থেকে, foo | null
প্রোগ্রামটি প্রকৃতপক্ষে আসল উপকারী এবং সুবিধাজনক , foo >/dev/null
টাইপ করতে খুব সামান্য সময় নেয় এবং অদ্ভুত বলে মনে হতে পারে।
তবে এখানে দুটি অনুশীলন:
কর্মসূচির বাস্তবায়ন শুরু করা যাক null
বিদ্যমান ইউনিক্স সরঞ্জাম ও ব্যবহার /dev/null
- সহজ: cat >/dev/null
। সম্পন্ন.
আপনি বাস্তবায়ন করতে পারেন /dev/null
পরিপ্রেক্ষিতে null
?
আপনি একেবারে ঠিক বলেছেন যে স্রেফ ইনপুট ফেলে দেওয়ার জন্য সি কোডটি তুচ্ছ, সুতরাং এটি এখনও স্পষ্ট হতে পারে না যে কার্যটির জন্য ভার্চুয়াল ফাইল উপলব্ধ থাকা কেন এটি কার্যকর।
বিবেচনা করুন: প্রায় প্রতিটি প্রোগ্রামিং ভাষার ইতিমধ্যে ফাইল, ফাইল বর্ণনাকারী এবং ফাইল পাথের সাথে কাজ করা প্রয়োজন , কারণ তারা প্রথম থেকেই ইউনিক্সের "সবকিছুই একটি ফাইল" দৃষ্টান্তের অংশ ছিল।
আপনার সমস্ত কিছু যদি স্টাডাউটে লেখার মতো প্রোগ্রাম হয় তবে ভাল, আপনি যদি সেগুলিকে সমস্ত ভার্চুয়াল ফাইলগুলিতে পুনর্নির্দেশ করেন যা সমস্ত লেখাকে গ্রাস করে, বা এমন কোনও পাইপ যা সমস্ত লেখাকে গ্রাস করে সেগুলিতে প্রোগ্রামটি কিছু পাত্তা দেয় না।
এখন আপনার কাছে যদি এমন প্রোগ্রাম থাকে যা হয় হয় তথ্য পড়ার বা লেখার জন্য ফাইল পাথ গ্রহণ করে (যা বেশিরভাগ প্রোগ্রামগুলি করে) - এবং আপনি সেই প্রোগ্রামগুলিতে "ফাঁকা ইনপুট" বা "এই আউটপুট" কার্যকারিতা যুক্ত করতে চান - ভাল, /dev/null
এটি নিখরচায় আসে।
লক্ষ্য করুন যে এর কমনীয়তাটি হ'ল সমস্ত জড়িত প্রোগ্রামগুলির কোড জটিলতা হ্রাস করে - প্রতিটি সাধারণ-তবে-বিশেষ ব্যবহারের জন্য যা আপনার সিস্টেম একটি প্রকৃত "ফাইল নাম" সহ "ফাইল" হিসাবে সরবরাহ করতে পারে, আপনার কোডটি কাস্টম কমান্ড যুক্ত এড়াতে পারে হ্যান্ডল করার জন্য লাইন বিকল্প এবং কাস্টম কোড পাথ path
ভাল সফ্টওয়্যার ইঞ্জিনিয়ারিং প্রায়শই এমন সমস্যাগুলির কিছু উপাদানকে এমনভাবে বিমূর্ত করার জন্য ভাল বা "প্রাকৃতিক" রূপক সন্ধানের উপর নির্ভর করে যা ভাবতে সহজ হয় তবে নমনীয় থাকে , যাতে আপনি মূলত একই স্তরের উচ্চ স্তরের সমস্যার সমাধান করতে পারেন ক্রমাগত একই নিম্ন-স্তরের সমস্যার সমাধান সংশোধন করার জন্য সময় এবং মানসিক শক্তি ব্যয় করুন।
"সবকিছুই একটি ফাইল" সম্পদ অ্যাক্সেসের জন্য open
এটির একটি রূপক বলে মনে হয়: আপনি একটি উত্তরাধিকারসূত্রে নেমস্পেসে প্রদত্ত একটি পথের ডাক দেন, বস্তুর সাথে একটি রেফারেন্স (ফাইল বর্ণনাকারী) পেতে পারেন read
এবং আপনি write
ফাইল ডেস্ক্রিপ্টারগুলিতে এবং ইত্যাদি করতে পারেন । আপনার স্টিডিন / স্টাডাউট / স্ট্ডার হ'ল ফাইল বর্ণনাকারী যা কেবল আপনার জন্য প্রাক-খোলার হয়ে গেছে। আপনার পাইপগুলি কেবল ফাইল এবং ফাইল বর্ণনাকারী এবং ফাইল পুনঃনির্দেশ আপনাকে এই সমস্ত টুকরা একসাথে আঠালো করতে দেয়।
এই বিমূর্তগুলি একসাথে কতটা ভালভাবে কাজ করেছে, এবং ইউনিক্স অংশটির মতোই সফল হয়েছিল, এবং /dev/null
পুরোটির অংশ হিসাবে এটি সবচেয়ে ভাল বোঝা যায়।
পিএস এটি "সবকিছুই একটি ফাইল" এর ইউনিক্স সংস্করণ এবং মূল্যবান /dev/null
রূপকটির আরও নমনীয় এবং শক্তিশালী জেনারালাইজেশনের দিকে প্রথম পদক্ষেপের মতো জিনিসগুলি অনুসরণ করে যা অনেকগুলি সিস্টেমে প্রয়োগ করা হয়েছিল at
উদাহরণস্বরূপ, ইউনিক্সে বিশেষ ফাইল-জাতীয় বস্তুর মতো /dev/null
কার্নেলটি নিজেই প্রয়োগ করা উচিত ছিল, তবে দেখা গেছে যে ফাইল / ফোল্ডার আকারে কার্যকারিতা প্রকাশ করার পক্ষে এটি যথেষ্ট কার্যকর যে তখন থেকে একাধিক সিস্টেম প্রোগ্রামগুলির জন্য একটি উপায় সরবরাহ করে that এটা করতে.
প্রথমটির মধ্যে একটি প্ল্যান 9 অপারেটিং সিস্টেম ছিল, যা ইউনিক্স তৈরি করা একই ব্যক্তিদের দ্বারা তৈরি হয়েছিল। পরে, জিএনইউ হার্ড এর "অনুবাদকদের" সাথে একই রকম কিছু করেছিল। এদিকে, লিনাক্স FUSE পেয়েছে (যা এখন অন্য মূলধারার সিস্টেমেও ছড়িয়ে পড়েছে)।
cat foo | bar
বেশিরভাগটিই কেন এটি তুলনায় আরও খারাপ (স্কেল)bar <foo
।cat
একটি তুচ্ছ প্রোগ্রাম, তবুও একটি তুচ্ছ প্রোগ্রাম ব্যয় তৈরি করে (তাদের মধ্যে কিছু ফিফো শব্দার্থবিজ্ঞানের ক্ষেত্রে নির্দিষ্ট - কারণ প্রোগ্রামগুলি ফিফোরseek()
ভিতরে থাকতে পারে না , উদাহরণস্বরূপ, এমন একটি প্রোগ্রাম যা সন্ধানের সাথে দক্ষতার সাথে প্রয়োগ করা যেতে পারে আরও অনেক ব্যয়বহুল ক্রিয়াকলাপ শেষ করতে পারে) যখন পাইপলাইন দেওয়া হয়; যেমন অক্ষরযুক্ত ডিভাইসের সাহায্যে/dev/null
সেগুলি অপারেশনগুলিকে নকল করতে পারে, বা একটি বাস্তব ফাইলের সাহায্যে এটি প্রয়োগ করতে পারে তবে কোনও ফিফো কোনও প্রসঙ্গে প্রাসঙ্গিক-সচেতন পরিচালনা পরিচালনা করতে দেয় না)।