সরল ব্যাখ্যা
অনেকগুলি ইউটিলিটির মতো, এটি একটি প্রোগ্রামের কাছে অদ্ভুত কিছু না grep
হয়ে লাইন বাফার এবং পুরোপুরি বাফার হওয়াতে এর স্ট্যান্ডার্ড আউটপুটকে পরিবর্তিত করে । পূর্ববর্তী ক্ষেত্রে, সি লাইব্রেরি আউটপুট ডেটা মেমরির মধ্যে রাখে না যতক্ষণ না হয় সেই সমস্ত ডেটা সম্বলিত বাফারটি পূরণ করা হয় বা এতে একটি লাইনফিড অক্ষর যুক্ত না হয় (বা প্রোগ্রামটি পরিষ্কারভাবে শেষ হয়), এরপরে এটি write()
আসলে বাফার সামগ্রীগুলি লেখার জন্য আহ্বান জানায় । পরবর্তী ক্ষেত্রে, কেবলমাত্র ইন-মেমরি বাফার পূর্ণ হয়ে যায় (বা প্রোগ্রামটি পরিষ্কারভাবে শেষ হবে) এটি ট্রিগার করে write()
।
আরও বিস্তারিত ব্যাখ্যা
এটি সুপরিচিত, তবে কিছুটা ভুল, ব্যাখ্যা। আসলে, স্ট্যান্ডার্ড আউটপুট লাইনের বাফার নয় তবে জিএনইউ সি লাইব্রেরি এবং বিএসডি সি লাইব্রেরিতে স্মার্ট বাফার করেছে। স্ট্যান্ডার্ড আউটপুট এছাড়াও যখন মান পড়া রাঙা ইনপুট নিঃশেষিত তার ইন-মেমোরি বাফার (প্রাক পঠিত ইনপুটের) এবং C লাইব্রেরি ডাকতে হয়েছে read()
আরো কিছু ইনপুট আনতে এবং এটি একটি নতুন লাইনের শুরুতে পড়া হয়। (এর এক কারণ হ'ল অচলাবস্থা রোধ করা যখন অন্য কোনও প্রোগ্রাম নিজেকে ফিল্টারের উভয় প্রান্তের সাথে সংযুক্ত করে এবং ফিল্টারটিতে লেখার মাধ্যমে এবং এটি থেকে পড়াতে পর্যায়ক্রমে লাইন বাই লাইন পরিচালনা করতে সক্ষম হতে পারে; জিএনইউতে "কোপ্রোসেসিস" এর মতো) awk
উদাহরণ স্বরূপ.)
সি লাইব্রেরির প্রভাব
grep
এবং অন্যান্য ইউটিলিটিগুলি এটি করে - বা আরও কঠোরভাবে, তারা যে সি লাইব্রেরিগুলি ব্যবহার করে এটি এটি করে কারণ এটি তাদের সি স্ট্যান্ডার্ড আউটপুটটি কী কী তা আবিষ্কার করে তার উপর ভিত্তি করে সি ভাষায় প্রোগ্রামিংয়ের একটি সংজ্ঞায়িত বৈশিষ্ট্য। যদি (এবং কেবলমাত্র) এটি কোনও ইন্টারেক্টিভ ডিভাইস না হয় তবে তারা পূর্ণ বাফারিং বেছে নেয়, অন্যথায় তারা স্মার্ট বাফারিং বেছে নেয়। একটি পাইপ একটি ইন্টারেক্টিভ ডিভাইস হিসাবে বিবেচিত হয় না, কারণ কমপক্ষে ইউনিক্স এবং লিনাক্স বিশ্বে ইন্টারেক্টিভ ডিভাইস হওয়ার সংজ্ঞাটি মূলত isatty()
প্রাসঙ্গিক ফাইল বর্ণনাকারীর জন্য কলকে সত্য বলে প্রত্যাবর্তন করে।
পূর্ণ বাফারিং অক্ষম করার জন্য কার্যবিধির কাজ
কিছু ইউটিলিটি যেমন grep
আইডিসিঙ্ক্র্যাটিক বিকল্প রয়েছে যেমন --line-buffered
এই সিদ্ধান্ত পরিবর্তন করে, যা আপনি দেখতে পাচ্ছেন ভুল-নাম দেওয়া হয়েছে। তবে ফিল্টার প্রোগ্রামগুলির একটি অদৃশ্যভাবে ছোট ছোট ভগ্নাংশের যে আসলে ব্যবহার করতে পারে such
আরও সাধারণভাবে, কেউ এমন সরঞ্জাম ব্যবহার করতে পারে যা সি লাইব্রেরির নির্দিষ্ট অভ্যন্তরগুলির মধ্যে খনন করে এবং তার সিদ্ধান্ত গ্রহণের পরিবর্তন করতে পারে (যা প্রোগ্রামটি পরিবর্তিত করতে হবে যদি সুরক্ষা সমস্যা থাকে তবে নির্দিষ্ট সি লাইব্রেরির জন্যও নির্দিষ্ট, এবং প্রকৃতপক্ষে) প্রোগ্রামে লিখিত বা সি ল্যাঙ্গুয়েজ উপরে স্তরপূর্ণ), অথবা যেমন টুলস নির্দিষ্ট ptybandage
যে না কর্মসূচির অভ্যন্তরীণ পরিবর্তন কিন্তু একটি সিউডো-টার্মিনাল মান আউটপুট সিদ্ধান্ত হিসাবে "ইন্টারেক্টিভ" আসে আউট, যাতে কেবল মধ্যস্থলে স্থাপন করা, এর এটি প্রভাবিত করুন।
আরও পড়া
cat
ফাইলগুলি সংযুক্ত করে। আপনি পাইপ দিয়ে কি করতে চেষ্টা করছেনcat
?