প্রতিটি সকেটের জন্য একটি ফাইল আছে?


21

ইউনিক্স ওয়ার্ল্ডের "সবকিছুই একটি ফাইল"।

উপরে বাক্য বিখ্যাত। আমি যখন রান করি তখন আমি echo "hello programmer" >> /dev/tty1প্রদত্ত স্ট্রিংটি দেখতে পারি TeleType 1 , ....

প্রতি এবং কি যেখানে ফাইল হয় socket? ধরুন আমার বন্ধুটি আমার পিসিতে সংযুক্ত হয়েছে এবং এর আইপি h.h.h.h, আমি কীভাবে সম্পর্কিত ফাইলটি অ্যাক্সেস করতে পারি? এটা কি সম্ভব?


3
সকেট এপিআই আসলে এই বিষয়ে "ইউনিক্স নীতি" থেকে বিচ্যুতি, কারণ এটি মূলত বিএসডি থেকে এসেছে । নোট করুন যে বেল ল্যাবগুলি থেকে সর্বদা প্ল্যান 9 রয়েছে যা "ইউনিক্সের চেয়ে আরও বেশি ইউনিক্স" - এমনকি নেটওয়ার্ক এবং গ্রাফিক্স এপিআইগুলি ফাইল রয়েছে।
ntoskrnl

প্ল্যান 9 এর কাগজপত্রগুলিতে সকেট এবং প্রক্রিয়াগুলি ন্যায্য পরিমাণের কথা উল্লেখ করা হয়েছে, বেশিরভাগ ক্ষেত্রে ইউএনআইএক্স মডেলটি কোথায় ভুল হয়েছে talking
strugee

উত্তর:


9

মানুষ 7 ইউনিক্স:

একই মেশিনে দক্ষতার সাথে প্রক্রিয়াগুলির মধ্যে যোগাযোগ করার জন্য AF_UNIX (এএফ_লোকাল নামে পরিচিত) সকেট পরিবারও ব্যবহৃত হয়। Ditionতিহ্যগতভাবে, ইউনিক্স ডোমেন সকেটগুলি হয় নামবিহীন, বা কোনও ফাইল সিস্টেমের প্যাথনামে আবদ্ধ (টাইপ সকেটের হিসাবে চিহ্নিত)) লিনাক্স একটি বিমূর্ত নেমস্পেস সমর্থন করে যা ফাইল সিস্টেমের চেয়ে পৃথক।

অর্থাত্ প্রতিটি সকেটকে একটি ফাইল হিসাবে দেখা যায় না ("ফাইলের নাম ছাড়া কোনও ফাইল নয়" অর্থে)।

তবে সকেটের তালিকা সহ ফাইল রয়েছে (যেমন /proc/net/tcp); যদিও "সবকিছুই একটি ফাইল" এর অর্থ হ'ল না।


38

সকেট একটি ফাইল is তবে সমস্ত ফাইলের নাম নেই। এখানে ফাইলগুলির কয়েকটি উদাহরণ রয়েছে যার নাম নেই:

  • যে কোনও ফাইলের নাম থাকত এবং এখন মুছে ফেলা হয় তবে এটি এখনও একটি প্রোগ্রাম দ্বারা খোলা হয়।
  • একটি নামবিহীন পাইপ , যেমন |শেল অপারেটর দ্বারা তৈরি একটি ।
  • বেশিরভাগ সকেট : যে কোনও ইন্টারনেট সকেট , বা ইউনিক্স সকেট যা ফাইল সিস্টেমের নেমস্পেসে নেই (এটি বিমূর্ত নেমস্পেসে বা নামবিহীন হতে পারে)।

নামবিহীন পাইপ বা সকেটের মতো ফাইলগুলি একটি প্রক্রিয়া দ্বারা তৈরি হয় এবং কেবলমাত্র সেই প্রক্রিয়াতে বা পরবর্তীকালে নির্মিত শিশু প্রক্রিয়াগুলিতে অ্যাক্সেস করা যায়। (এটি পুরোপুরি সত্য নয়: একটি প্রক্রিয়া যার পাইপ বা সকেট (বা অন্য কোনও ফাইল) খোলা থাকে এটি ইউনিক্স সকেটের মাধ্যমে অন্য প্রক্রিয়াতে প্রেরণ করতে পারে; এটি ফাইল বিবরণকারী পাসিং হিসাবে পরিচিত ))

সকেটগুলির একটি নাম রয়েছে (ফাইল সিস্টেমে হোক বা বিমূর্ত) সে নামটি ব্যবহার করে খোলা যেতে পারে। যথাযথ সংযোগ রয়েছে এমন কোনও মেশিন থেকে নেটওয়ার্ক সকেটগুলি দূর থেকে খোলা যেতে পারে (বা আরও স্পষ্টভাবে সংযুক্ত)।


এটা সঠিক উত্তর.
jforberg

4
/proc/<pid>/fd/*এবং /proc/net/*আকর্ষণীয় হতে পারে
n611x007

দয়া করে এই উত্তরটি গ্রহণ করুন। এটি আইএমএইচও অনেক বেশি নির্ভুল।
ব্যবহারকারী1202136

13

প্রতিটি সকেট প্রতি ফাইল কোথায় এবং কোথায়?

"সবকিছু" একটি অতিরঞ্জিত। এটি কোনও কঠোর নীতি নয়, ইন্টারফেসের জন্য ফাইল সিস্টেমটি ব্যবহার করা কেবল একটি সাধারণ অভ্যাস, যেহেতু ফাইল সিস্টেমের অ্যাক্সেস সিস্টেম কলগুলির সমার্থক (যেমন, ফাইল সিস্টেমটি সত্যিকার অর্থে কার্নেলের সাথে একটি ইন্টারফেস, এবং তাই সব ধরণের জিনিসগুলির জন্য একটি সুবিধাজনক বিন্যাস সরবরাহ করে) । অন্যান্য অপারেটিং সিস্টেমগুলি এটির যতটা ব্যবহার করে না তাই এটি একটি বিশিষ্ট বৈশিষ্ট্য হিসাবে বিবেচনা করা হয়।

হউক লেজিংয়ের উল্লেখ অনুসারে, "ইউনিক্স স্থানীয়" সকেটের নামযুক্ত পাইপগুলির মতো ফাইল নোড রয়েছে (দেখুন man fifo)। তবে, ইন্টারনেট প্রোটোকল সকেট (নেটওয়ার্ক যোগাযোগের জন্য ব্যবহৃত) তা করে না। পরিবর্তে, তারা ইউজার স্পেসে একটি বন্দর নম্বর যুক্ত। মনে রাখবেন যে একটি একক বন্দরের একটি সার্ভার সকেট একাধিক ক্লায়েন্টকে তাদের নিজস্ব সকেটের সাথে সংযুক্ত করে (একক ইউনিক্স স্থানীয় সকেট ফাইলটি এইভাবে সার্ভারের সাহায্যে ব্যবহার করা যেতে পারে, অর্থাত, একই ফাইলের ঠিকানার সাথে একাধিক সকেট যুক্ত থাকতে পারে) এবং কোডে এগুলি পৃথক পৃথক সংখ্যাসূচক ফাইল বর্ণনাকারীর মাধ্যমে স্বতন্ত্রভাবে চিহ্নিত করা হয়

সুতরাং, যে অর্থে সব সকেট হয় ফাইলের মত অনেক, এবং একটি লিঙ্ক আছে /proc/[pid]/fd/। এমনকি আপনি readlink()এই ইনোডটিতে কল করতে পারেন এবং একটি বিশেষ ধরণের ফাইল নাম পেতে পারেন যা কমান্ড লাইন সরঞ্জামগুলিতে ব্যবহৃত হয় lsof, যেমন আমি বিশ্বাস করি; একইভাবে আপনি সকেট বর্ণনাকারী সম্পর্কে তথ্য পেতে পারেন fstat()


আপনার অর্থ "তাদের আইনের মাধ্যমে ইউজারস্পেসে চিহ্নিত"? প্রতিটি সকেটের কোনও পোর্ট নম্বর নেই এবং একই বন্দর সংখ্যার জন্য কয়েকটি সকেট থাকতে পারে (যদিও তা বোঝায় না)।
হউক লেগেছে

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