আপনার পারফরম্যান্স প্রশ্ন সম্পর্কে, পাইপগুলি ফাইলের চেয়ে বেশি দক্ষ কারণ কোনও ডিস্ক আইও প্রয়োজন হয় না। এর cmd1 | cmd2
চেয়ে আরও কার্যকর cmd1 > tmpfile; cmd2 < tmpfile
( tmpfile
যদি এটি কোনও পাইপ হিসাবে র্যাম ডিস্ক বা অন্য মেমরি ডিভাইসে ব্যাকড হয় তবে এটি সত্য হবে না ; তবে এটি যদি নামযুক্ত পাইপ cmd1
হয় তবে ব্যাকগ্রাউন্ডে চালানো উচিত কারণ পাইপটি পূর্ণ হয়ে গেলে এর আউটপুট ব্লক করতে পারে) )। আপনার যদি ফলাফলের প্রয়োজন হয় cmd1
এবং এখনও এর আউটপুটটি প্রেরণ করতে হয় তবে cmd2
আপনার উচিত cmd1 | tee tmpfile | cmd2
যা ডিস্ক পড়ার ক্রিয়াকলাপকে সমান্তরালভাবে এড়িয়ে চলতে অনুমতি দেয় cmd1
এবং cmd2
চালাতে পারে cmd2
।
অনেকগুলি প্রক্রিয়া একই পাইপে পড়ে / লিখলে নামযুক্ত পাইপগুলি দরকারী। এগুলি তখনও কার্যকর হতে পারে যখন কোনও প্রোগ্রাম তার আইও ফাইল ব্যবহার করার প্রয়োজনের জন্য স্টিডিন / স্টাডআউট ব্যবহারের জন্য ডিজাইন করা হয় না । আমি ইটালিকগুলিতে ফাইলগুলি রেখেছি কারণ নামক পাইপগুলি স্টোরেজ পয়েন্টে হুবহু ফাইল নয় কারণ এগুলি মেমরিতে থাকে এবং একটি নির্দিষ্ট বাফার আকার থাকে, এমনকি যদি তাদের একটি ফাইল-সিস্টেম এন্ট্রি (রেফারেন্স উদ্দেশ্যে) থাকে। অন্যান্য জিনিষ ঠিক মনে: ইউনিক্স ফাইল ছাড়া ফাইলসিস্টেম এন্ট্রি আছে /dev/null
বা অন্যদের এন্ট্রি /dev
বা /proc
।
যেহেতু পাইপের (নামযুক্ত এবং নামবিহীন) একটি নির্দিষ্ট বাফার আকার থাকে তাই তাদের পড়ার / লেখার ক্রিয়াকলাপগুলি ব্লক করতে পারে, যার ফলে পড়া / লেখার প্রক্রিয়া IOWait অবস্থায় চলে যেতে পারে। এছাড়াও, মেমরি বাফার থেকে পড়ার সময় আপনি কখন একটি ইওএফ পাবেন? এই আচরণের নিয়মগুলি ভালভাবে সংজ্ঞায়িত করা হয় এবং লোকটিতে এটি পাওয়া যায়।
পাইপগুলি (নামযুক্ত এবং নামবিহীন) দিয়ে আপনি যে জিনিসটি করতে পারবেন না তা ডেটা ফিরে চাওয়া seek এগুলি যেমন মেমরি বাফার ব্যবহার করে প্রয়োগ করা হয়, এটি বোধগম্য।
সম্পর্কে "everything in Linux/Unix is a file"
, আমি একমত না। নামী পাইপগুলিতে ফাইল সিস্টেমের এন্ট্রি থাকে তবে ঠিক ফাইল হয় না। নামহীন পাইপগুলিতে ফাইল সিস্টেমের এন্ট্রি নেই (সম্ভবত এটি ব্যতীত /proc
)। তবে ইউএনআইএক্স-এর বেশিরভাগ আইও অপারেশনগুলি পড়া / লেখার ফাংশন ব্যবহার করে সম্পন্ন হয় যার নামবিহীন পাইপ (এবং সকেট) সহ একটি ফাইল বর্ণনাকারী প্রয়োজন । আমি মনে করি না যে আমরা এটি বলতে পারি "everything in Linux/Unix is a file"
, তবে আমরা অবশ্যই এটি বলতে পারি "most IO in Linux/Unix is done using a file descriptor"
।