ইউনিক্স ডোমেন সকেটের ভিএস নামক পাইপ?


122

সকেট নামের একটি ইউনিক্স দেখার পরে এবং আমি ভেবেছিলাম তাদের পাইপগুলির নাম দেওয়া হয়েছিল। আমি নাম পাইপগুলিতে তাকালাম এবং খুব বেশি পার্থক্য দেখতে পাইনি। আমি দেখেছি সেগুলি আলাদাভাবে শুরু করা হয়েছিল তবে কেবলমাত্র আমি লক্ষ্য করছি। দু'জনই সি রাইটিং / রিড ফাংশন এবং এএফআইকে একসাথে কাজ করে।

ইউনিক্স ডোমেন সকেট এবং নামযুক্ত পাইপের মধ্যে পার্থক্য কী? আমি কখন অন্যটির উপরে উঠব? আমার ডিফল্টরূপে কোনটি ব্যবহার করা উচিত (যেমন আমি সি ++ তে ডিফল্টরূপে ভেক্টরটি কীভাবে ডেস্ক, তালিকার তুলনায় ব্যবহার করব বা যদি আমার প্রয়োজন হয় তবে যা কিছু আছে)?

c  linux 

1
@ গ্রেগ হিউগিল: দুর্ভাগ্যক্রমে এই প্রশ্নটি আমি যে পার্থক্যটি জিজ্ঞাসা করছি তার চেয়ে "আইপিসি কি" এর বেশি more আমি কি পোস্ট করার আগে দেখতে পেলাম, আমি কি এর সাথে সম্পর্কিত এবং বলা উচিত? (এটি আমার পক্ষে সহায়ক ছিল না)

1
@ এসিড: হ্যাঁ, সম্পর্কিত প্রশ্নগুলির সাথে লিঙ্ক করা এবং আপনার এখনও কোন প্রশ্ন রয়েছে তা ব্যাখ্যা করা সর্বদা একটি ভাল ধারণা।
বেন ভয়েগট

3
এই নিবন্ধটি বেশ ভাল এটি সংক্ষিপ্তসার। ইউনিক্স ডোমেন সকেটকে অপসারণ করা
মা

ভাঙা লিঙ্ক: techdeviancy.com/uds.html
mcdado

উত্তর:


106

ইউনিক্স-ডোমেন সকেট সাধারণত নামযুক্ত পাইপগুলির চেয়ে আরও নমনীয়। তাদের কিছু সুবিধা হ'ল:

  • আপনি এগুলি যোগাযোগের জন্য দুটিরও বেশি প্রক্রিয়ার জন্য ব্যবহার করতে পারেন (উদাঃ সম্ভাব্য একাধিক ক্লায়েন্ট প্রক্রিয়া সংযোগের সাথে একটি সার্ভার প্রক্রিয়া);
  • এগুলি দ্বিদর্শী;
  • তারা প্রক্রিয়াগুলির মধ্যে কার্নেল-যাচাই করা ইউআইডি / জিআইডি শংসাপত্রগুলি সমর্থন করে;
  • তারা প্রক্রিয়াগুলির মধ্যে ফাইল বর্ণনাকারী পাস করা সমর্থন করে;
  • তারা প্যাকেট এবং সিকোয়েন্সড প্যাকেট মোডগুলি সমর্থন করে।

এই বৈশিষ্ট্যগুলি অনেক ব্যবহার করতে, আপনাকে ব্যবহার করতে হবে send()/ recv()সিস্টেম কল বদলে পরিবার write()/ read()


11
অন্যদিকে, সম্ভবত এটি বলা উচিত যে নাম পাইপগুলির সুবিধা রয়েছে যে তারা সাধারণ open(2)কলগুলির মাধ্যমে তাদের "সংযুক্ত" হতে পারে , যা তাদের প্রোগ্রামগুলির মধ্যে অ্যাড-হক পাইপলাইনগুলি সাধারণত ফাইল নাম যুক্তিগুলির জন্য তৈরি করার জন্য আরও উপযুক্ত করে তোলে।
দোলডা 2000 হাজার

66

একটি পার্থক্য হ'ল নামযুক্ত পাইপগুলি একমুখী, সুতরাং দ্বি-মুখী যোগাযোগের জন্য আপনাকে সেগুলির দুটি ব্যবহার করতে হবে। অবশ্যই সকেট দুটি উপায়। এটির পরিবর্তে দুটি ভেরিয়েবল ব্যবহার করা কিছুটা জটিল বলে মনে হচ্ছে (এটি একটি সকেটের পরিবর্তে দুটি পাইপ)।

এছাড়াও, উইকিপিডিয়া নিবন্ধটি নিম্নলিখিত পয়েন্টটিতে বেশ স্পষ্ট : "ইউনিক্স ডোমেন সকেটগুলি বাইট স্ট্রিম হিসাবে বা ডেটাগ্রাম সিকোয়েন্স হিসাবে তৈরি করা যেতে পারে, যখন পাইপগুলি কেবল বাইট স্ট্রিম হয়।"


নামযুক্ত পাইপগুলি আসলে দ্বি-দিকনির্দেশক তবে অর্ধ-দ্বৈত । এর অর্থ এই যে যোগাযোগটি A এর শেষ প্রান্ত থেকে বি, বা B এ যেতে পারে, তবে উভয়ই একই সময়ে নয়।


1
হুঁ মজার +1। আপনি কি যথাযথভাবে জানেন যে বাইস্ট্রিমে এবং ডেটাগ্রামের মধ্যে পার্থক্য কী? আপনার প্রেরিতের উদাহরণ বা আপনার মতো দু'জনের উদাহরণ ইতিমধ্যে এই প্রশ্নের জন্য করেছেন?

7
@acidzombie: একটি ডেটাগ্রাম-মোড পাইপ বা সকেট সীমানা বজায় রাখে, যাতে একটি writeকল একটি readকল দেয়। স্ট্রিম-মোডে ডেটা এক দীর্ঘ স্ট্রিমের সাথে একত্রে সংমিশ্রণ করা যায়, তাই অনেকগুলি লেখাগুলি একবারে পড়া যায় বা বিপরীতে। (উইন্ডোজের ডেটগ্রাম পাইপ রয়েছে, জোটোবারনের উত্তর অনুসারে ইউনিক্স দেয় না)
বেন ভয়েগট

1
@ বেনভয়েগ ভাল, ডেটাগ্রাম সকেট প্যাকেট বিতরণটি অবিশ্বাস্য, সুতরাং কোনও লেখা অগত্যা কোনও পঠন কল জেনারেট করে না। সম্ভবত স্থানীয় সকেটের জন্য, তবে এটি আপনার মন্তব্য থেকে পরিষ্কার নয়। সুতরাং নির্বিশেষে এটির সমস্যা রয়েছে।
xaxxon

3
@ এক্স্যাক্সসন: পাইপ এবং ইউনিক্স ডোমেন সকেট উভয়ই স্থানীয়, তাই গ্রহীতা একেবারে তার সারি খালি করে দিচ্ছে তা ক্ষতিহীন ।
বেন ভয়েগট

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