নামবিহীন পাইপের উপরে নামযুক্ত পাইপ ব্যবহার করার সুবিধা কী কী?


51

আমি ইন্টারভিউ প্রশ্নের একটি সেট পর্যালোচনা করছিলাম যা কোনও ইউনিক্স প্রশাসকের কাছ থেকে জিজ্ঞাসা করা হয়; আমি "পাইপ নামক" নামে একটি বিষয় পেয়েছি।

আমি বিষয়টি গুগল করেছিলাম; কিছুটা হলেও আমি এটি বুঝতে সক্ষম হয়েছি: - নামযুক্ত পাইপ || FIFO

তবে তবুও আমি অনুভব করি যে এই নির্দিষ্ট ধরণের পাইপটি কখন ব্যবহার করতে হবে তা সম্পর্কে আমার জ্ঞানের অভাব বোধ করছি। এমন কোনও বিশেষ পরিস্থিতি রয়েছে যেখানে নামবিহীন পাইপগুলি কাজ করতে ব্যর্থ হবে?


প্রযুক্তিগত ফোরামে আরেকটি লিঙ্ক: Writulearn.com/category/inter-process-communicationipc

উত্তর:


39

নামযুক্ত পাইপগুলির (ফিফো) চারটি সুবিধা রয়েছে যা আমি ভাবতে পারি:

  • আপনাকে একই সাথে পড়া / লেখার প্রক্রিয়া শুরু করতে হবে না
  • আপনার একাধিক পাঠক / লেখক থাকতে পারে যা সাধারণ বংশের প্রয়োজন হয় না
  • একটি ফাইল হিসাবে আপনি মালিকানা এবং অনুমতি নিয়ন্ত্রণ করতে পারেন
  • এগুলি দ্বি-দিকনির্দেশক, নামবিহীন পাইপগুলি দিকনির্দেশক হতে পারে *

    *) একটি প্রমিত শেল চিন্তা |পাইপলাইন যা দিক-অনির্দিষ্ট, বিভিন্ন শাঁস ( ksh, zsh, এবং bash) ও অফার coprocesses যা দ্বি-মুখী যোগাযোগ করতে পারে। পসিক্স পাইপগুলিকে অর্ধ-দ্বৈত হিসাবে (যেমন প্রতিটি পক্ষ কেবলমাত্র পড়তে বা লিখতে পারে) হিসাবে বিবেচনা করে, pipe()সিস্টেম কল দুটি ফাইল হ্যান্ডেল ফেরত দেয় এবং আপনার একটিকে কেবল পঠনযোগ্য এবং অন্যটিকে কেবল লেখার মতো হিসাবে বিবেচনা করার প্রয়োজন হতে পারে। কিছু (বিএসডি) সিস্টেমগুলি একই সাথে পড়তে এবং লিখতে সহায়তা করে (পসিক্স দ্বারা নিষিদ্ধ নয়), অন্যদের জন্য আপনার দুটি দিকের পাইপ প্রয়োজন, প্রতিটি দিকের জন্য একটি করে। আপনার pipe(), popen()এবং সম্ভবত popen2()ম্যান পৃষ্ঠাগুলি পরীক্ষা করুন । পাইপটির নামকরণ করা হয়েছে কিনা তার উপর নির্ভরশীলতা নির্ভর করতে পারে না, যদিও লিনাক্স ২.6 এ এটি নির্ভরশীল।

(আপডেট হয়েছে, স্টিফেন চ্যাজেলাসের প্রতিক্রিয়ার জন্য ধন্যবাদ )

সুতরাং কোনও নামহীন পাইপের সাহায্যে আপনি যা অর্জন করতে পারবেন না তা হ'ল একটি প্রচলিত ক্লায়েন্ট / সার্ভার অ্যাপ্লিকেশন।

ডাইরেক্টরিয়ালাল পাইপগুলি সম্পর্কে উপরের শেষ (স্ট্রাইকড) পয়েন্টটি লিনাক্সের ক্ষেত্রে প্রাসঙ্গিক, পসিক্স (দেখুন popen()) বলেছেন যে একটি পাইপ কেবল পঠনযোগ্য বা লিখনযোগ্য হতে পারে , লিনাক্সে সে একমুখী হয় । লিনাক্স-সংক্রান্ত বিশদ বিবরণ (p787) এর জন্য লিনাক্স কার্নেল (তৃতীয় এড। ও'রিলি) বোঝা দেখুন । অন্যান্য ওএসের অফার দ্বিদলীয় (নামবিহীন) পাইপ।

উদাহরণ হিসাবে, নাগিওস তার কমান্ড ফাইলের জন্য একটি ফিফো ব্যবহার করে । বিভিন্ন বাহ্যিক প্রক্রিয়া (সিজিআই স্ক্রিপ্টস, বাহ্যিক চেকস, এনআরপিই ইত্যাদি) এই ফিফিয়োতে ​​কমান্ড / আপডেট লেখেন এবং এগুলি অবিরাম নাগিস প্রক্রিয়া দ্বারা প্রক্রিয়া করা হয়।

নামযুক্ত পাইপগুলিতে টিসিপি সংযোগের বিপরীতে বৈশিষ্ট্য রয়েছে তবে গুরুত্বপূর্ণ পার্থক্য রয়েছে। কোনও ফিফোর একটি অবিরাম ফাইল সিস্টেমের নাম থাকার পরে আপনি কোনও পাঠক না থাকলেও এটিতে এটি লিখতে পারবেন, অবশ্যই লেখকরা ব্লক করবে (অ্যাসিঙ্ক বা অ-ব্লকিং I / O ছাড়াই), যদিও আপনি রিসিভারটি না থাকলে ডেটা আলগা করবেন না শুরু হয়েছে (বা পুনরায় চালু করা হচ্ছে)।

রেফারেন্সের জন্য, ইউনিক্স ডোমেন সকেটগুলি এবং এই স্ট্যাকওভারফ্লো প্রশ্নের উত্তর যা প্রধান আইপিসি পদ্ধতিগুলির সংক্ষিপ্তসার এবং এটি সম্পর্কে আলোচনা করে দেখুনpopen()


2
আপনার নামবিহীন পাইপ সহ একাধিক পাঠক / লেখকও থাকতে পারেন । লিনাক্সে, এগুলি নামহীন পাইপের চেয়ে দ্বি-দিকনির্দেশক নয়। এখানে একটি লেখার শেষ এবং একটি পড়ার শেষ রয়েছে এবং ডেটা কেবল এক দিকে প্রবাহিত হয়। আপনি যখন লেখার মোডে একটি ফিফো খুলবেন, আপনি লেখার সমাপ্তি পাবেন, পড়ার মোডে পঠন প্রান্তে, আরডাব্লু মোডে, আপনি লেখার শেষে লিখবেন এবং পড়া থেকে পড়বেন read এটি দ্বি-দিকনির্দেশক পাইপ বা ইউনিক্স ডোমেন সকেট থেকে পৃথক, যেখানে আপনার কাছে প্রতিটি দিকের ক্ষেত্রে পৃথকভাবে দুটি পৃথক প্রবাহ থাকে।
স্টাফেন চেজেলাস

প্রতিক্রিয়াটির জন্য @ স্টাফেনচাজেলাস ধন্যবাদ, আমি উত্তরটি আরও সুনির্দিষ্ট হওয়ার জন্য আপডেট করেছি এবং পাইপ এবং দিকনির্দেশনা স্পষ্ট করে (আশা করি)।
মিঃ স্পুর্যাটিক

কোনও নামযুক্ত পাইপের সাথে যোগাযোগের ক্ষেত্রে কী ডিস্ক আইও জড়িত? নাকি সবই স্মৃতিশক্তি? এই আইপিসি প্রক্রিয়াগুলির কার্য সম্পাদনের খামটি কী নির্ধারণ করে?
সিএমসিডিগ্রাগনকাই

15

বেনামে বা বেনামে পাইপগুলি বিভিন্ন প্রক্রিয়াগুলির মধ্যে এক থেকে এক, একপেশে আন্তঃক্রিয়া যোগাযোগের একটি মাধ্যম সরবরাহ করে যা কোনও পিতামাতা-সন্তানের সম্পর্কের দ্বারা সম্পর্কিত হয়, বা পাইপ সরবরাহকারী কোনও সাধারণ পিতামাতার সন্তান হয়ে যেমন শেল as প্রক্রিয়া। প্রক্রিয়াগুলি সম্পর্কিত হওয়ার কারণে পাইপের সাথে ফাইল বর্ণনাকারীদের সংঘবদ্ধতা অন্তর্ভুক্ত হতে পারে এবং প্রক্রিয়াগুলির বাহ্যিক কোনও নামের সাথে কোনও বস্তুর প্রয়োজন হয় না। একটি নামবিহীন পাইপটি কেবলমাত্র ততক্ষণ বিদ্যমান থাকে যেগুলি যে প্রক্রিয়াগুলি ব্যবহার করে তা পাইপটিতে খোলা ফাইল বর্ণনাকারীদের বজায় রাখে। যখন প্রক্রিয়াগুলি প্রস্থান হয় এবং ওএসগুলি প্রক্রিয়াগুলির সাথে যুক্ত সমস্ত ফাইল বর্ণনাকারী বন্ধ করে দেয়, নামবিহীন পাইপটি বন্ধ হয়ে যায়।

নামযুক্ত পাইপগুলি আসলে ফিফোর। এগুলি ফাইল সিস্টেমে নোড দ্বারা প্রতিনিধিত্ব করা অবিরাম অবজেক্ট। একটি নামী পাইপ এক বা একাধিক প্রক্রিয়ার মধ্যে বহু থেকে বহু, দ্বিমুখী যোগাযোগ সরবরাহ করে যা প্রয়োজনীয়ভাবে সম্পর্কিত নয় এবং একই সাথে অস্তিত্বের প্রয়োজন নেই। পাইপের ফাইলের নাম যোগাযোগের জন্য প্রক্রিয়াগুলির মধ্যে ঠিকানা বা চুক্তি হিসাবে কাজ করে। যদি কেবল একটি প্রক্রিয়া একটি নামযুক্ত পাইপকে লিখতে থাকে এবং অন্য একটি প্রক্রিয়া নামক পাইপ থেকে পড়ে, তবে নামযুক্ত পাইপ দুটি সম্পর্কিত প্রক্রিয়াটির মধ্যে একটি নামবিহীন পাইপ হিসাবে একইভাবে আচরণ করে।

সুতরাং সংক্ষিপ্ত উত্তরটি হ'ল সম্পর্কযুক্ত প্রক্রিয়াগুলির মধ্যে যোগাযোগের জন্য আপনার একটি নামযুক্ত পাইপ দরকার যা একই সাথে অস্তিত্ব থাকতে পারে।


+1 আমি মনে করি প্রক্রিয়াগুলি একই সময়ে একই সময়ে উপস্থিত থাকে (অন্যথায় পাইপটি কিছুটা অর্থহীন - আপনি কেবল একটি নিয়মিত ফাইলে জিনিস রেখে যেতে পারেন)। এই এবং ইউনিক্স ডোমেন সকেটগুলি প্রায়শই ডেমন পরিষেবাগুলি ব্যবহার করে যা নিয়ন্ত্রণ করা যায়, যেমন কমান্ড লাইন থেকে। আপনি যদি /runএকটি লিনাক্স ডেস্কটপ সিস্টেমে সন্ধান করেন তবে আপনি সম্ভবত দু'জনেই খুঁজে পাবেন (নামক ফিফোস এবং ইউনিক্স সকেট)। এটি আইপিসির একটি রূপ ।
সোনারলোকস

2
@ গল্ডিলোকস: এম্বেড থাকা সিস্টেমে প্রক্রিয়াগুলির মধ্যে একটি নামযুক্ত পাইপ সাধারণত মেমরি-বাসিন্দা অ্যাড-হক মেলবক্স হিসাবে ব্যবহৃত হয়, যেখানে যোগাযোগের প্রক্রিয়াগুলি স্বল্পস্থায়ী এবং একই সময়ে বিদ্যমান থাকে না। সুবিধাটি হ'ল শেয়ারিং মেমরি আইপিসি বনাম বাস্তবায়নের সরলতা এবং কেবল র‌্যাম ব্যবহার করা হয়। অসুবিধাটি হ'ল বুট এবং পাইপের বাইট-ওয়াইফ ফিফোর প্রকৃতি বনাম ভাগযুক্ত মেমরির সাথে কোনও কাঠামো ব্যবহারের ক্ষমতা between
জোনাথন বেন-অভ্রাহাম

@ জোনাথন: +১, আমার কিছু সন্দেহ আছে: - আমরা নামী পাইপগুলিকে ফিফো হিসাবে কেন উল্লেখ করি; প্রতিরোধক বস্তু কি?
অঙ্কিত

@ অঙ্কিত: কিছু লোক নামী পাইপকে ফিফো বলে থাকে কারণ এটি একটি ফিফোর ডেটা কাঠামোর মতো আচরণ করে, বিশেষত যখন একক প্রক্রিয়া দ্বারা পড়া এবং লেখার জন্য উভয় ক্ষেত্রেই এটি খোলা হয়। "অবিচ্ছিন্ন অবজেক্ট" দ্বারা আমি বোঝাতে চাইছি যে একটি নামক পাইপ একটি ফাইল সিস্টেমের অবজেক্টের সাথে সম্পর্কিত। এটি, নামের সাথে এটি এক ধরণের ফাইল এবং মিডিয়াতে সঞ্চিত অন্য ফাইলগুলির মতোই এটির দৃ pers়তা রয়েছে।
জোনাথন বেন-অভ্রাহাম

4

অন্য কোথাও উল্লেখ না করা একটি সুবিধা হ'ল নামযুক্ত পাইপ এমন জায়গাগুলিতে ব্যবহার করা যেতে পারে যেখানে কেবল একটি ফাইল করবে।

উদাহরণস্বরূপ, কিছু ইমেল ক্লায়েন্টের প্রতিটি মেইল ​​বার্তায় ~ / .সাইনচারের বিষয়বস্তু যুক্ত করার বৈশিষ্ট্য রয়েছে। যদি .সিগনেচারটি কমান্ড-লাইন বিকল্প হয় বা মেল ক্লায়েন্টটি যদি স্বাক্ষর করতে সক্ষম হয় যে .সাইনচারটি এক্সিকিউটেবল এবং এটি চালনা করে, তবে আপনার নামী পাইপের দরকার পড়বে না। তবে যদি মেল ক্লায়েন্টটি পরিশীলিত না হয়, আপনি .signature নামক একটি পাইপ তৈরি করতে পারেন এবং প্রতিবার ফাইলটি পড়ার সময় একটি নতুন স্বাক্ষর তৈরি করে এমন একটি অ্যাপ্লিকেশন চালাতে পারেন।


মজাদার. আপনার কি এমন অ্যাপ্লিকেশন রয়েছে? ফিফোর অ্যাক্সেস কখন করা হচ্ছে তা দেখার জন্য এটি কার্নেল স্তরে দেখতে হবে বলে মনে হচ্ছে।
ওয়াইল্ডকার্ড

4

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

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