ফাইলের বর্ণনাকারী কী, সহজ পদে ব্যাখ্যা করা হয়েছে?


383
  1. উইকিপিডিয়ার তুলনায় ফাইল বর্ণনাকারীদের আরও সরল বর্ণনা কী হতে পারে? কেন তাদের প্রয়োজন হয়? বলুন, শেল প্রক্রিয়াগুলি উদাহরণ হিসাবে গ্রহণ করুন এবং এটি এর জন্য কীভাবে প্রযোজ্য?

  2. কোনও প্রক্রিয়া সারণীতে একাধিক ফাইল ডেস্ক্রিপ্টর রয়েছে। যদি হ্যাঁ, কেন?


3
স্টিডিন স্টাডাউট স্টেডার ইত্যাদি ধারণাগুলি সম্পর্কে কী? আমার কাছে বলার মতো একটি উদাহরণ রয়েছে যা ব্রাউজার প্রক্রিয়াটি খোলা হয়েছে এবং এটি আমার এইচটিএমএল প্রদর্শিত হওয়ার জন্য কিছু অস্থায়ী ফাইল খোল করেছে। প্রক্রিয়া পড়তে / লিখতে একই এফডি ব্যবহার করে? এছাড়াও প্রক্রিয়া সারণী ....... এটিতে fd0 পয়েন্টার fd1 পয়েন্টার fd2 পয়েন্টার মত এন্ট্রি আছে ..... এর অর্থ এই সমস্ত ফাইল র‌্যামে আছে? কেন অন্য পয়েন্টার?
নিশান্ত

43
আপনি যখন কোনও ফাইল খোলেন, ওএস সেই ফাইলটিতে একটি স্ট্রিম তৈরি করে এবং সেই স্ট্রিমটি খোলার ফাইলের সাথে সংযুক্ত করে, বাস্তবে বর্ণনাকারী সেই স্ট্রিমটি উপস্থাপন করে। একইভাবে ওএস দ্বারা তৈরি কিছু ডিফল্ট স্ট্রিম রয়েছে। এই স্ট্রিমগুলি ফাইলগুলির পরিবর্তে আপনার টার্মিনালের সাথে সংযুক্ত রয়েছে। সুতরাং আপনি যখন টার্মিনালে কিছু লিখবেন এটি স্টিডিন স্ট্রিম এবং ওএসে যায়। এবং আপনি যখন টার্মিনালে "ls" কমান্ড লিখেন, ওএস স্টাডআউট স্ট্রিমে আউটপুট লিখবে। stdout স্ট্রিমটি আপনার মনিটরের টার্মিনালের সাথে সংযুক্ত রয়েছে যাতে আপনি সেখানে আউটপুট দেখতে পারেন।
তৈয়ব

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

5
ফাইল ডেস্ক্রিপ্টর ফাইল ফাইল এক এক ম্যাপিং নয়। আমি একই ফাইলটি 4 বার খুলতে এবং 4 টি পৃথক ফাইল বর্ণনাকারী পেতে পারি। যার প্রত্যেকটি ব্যবহার করা যেতে পারে (ফ্ল্যাগগুলির উপর নির্ভর করে উন্মুক্ত ()) পড়ার জন্য, লেখার জন্য বা উভয়ের জন্য। যতক্ষণ না ফাইলটি র‍্যামে বা ডিস্কে থাকে - এটি কার্নেল এবং এর বিভিন্ন ক্যাশে আপনার কাছ থেকে লুকিয়ে রয়েছে। শেষ পর্যন্ত ক্যাশেটি কী ডিস্কে রয়েছে তার সাথে মিলবে (লেখার জন্য), এবং কার্নেল পড়ার জন্য ডিস্কে ফিরে যাবে না, যদি ডেটা ইতিমধ্যে ক্যাশে থাকে।
বানো

7
এটি সহজেই বোঝার জন্য এটি একটি ভাল নিবন্ধ যা সহজেই ডাউনআপসিএস
কৃষ্ণ গোপাল

উত্তর:


561

সহজ কথায়, আপনি যখন কোনও ফাইল খুলবেন, অপারেটিং সিস্টেম সেই ফাইলটি উপস্থাপন করতে এবং সেই খোলা ফাইলটির তথ্য সংরক্ষণ করার জন্য একটি এন্ট্রি তৈরি করে। সুতরাং আপনার ওএসে যদি 100 টি ফাইল খোলা থাকে তবে ওএসে 100 টি প্রবেশ (কার্নেলের কোথাও) থাকবে। এই এন্ট্রিগুলি (... 100, 101, 102 ....) এর মতো পূর্ণসংখ্যার দ্বারা প্রতিনিধিত্ব করা হয়। এই এন্ট্রি নম্বরটি ফাইল বর্ণনাকারী। সুতরাং এটি কেবলমাত্র একটি পূর্ণসংখ্যা নম্বর যা অপারেটিং সিস্টেমের মধ্যে একটি খোলা ফাইলটিকে অনন্যভাবে উপস্থাপন করে। যদি আপনার প্রক্রিয়া 10 টি ফাইল খোলে তবে আপনার প্রক্রিয়া সারণিতে ফাইল বর্ণনাকারীদের জন্য 10 টি প্রবেশ থাকবে।

একইভাবে আপনি যখন কোনও নেটওয়ার্ক সকেট খোলেন, তখন এটি একটি পূর্ণসংখ্যার দ্বারাও উপস্থাপিত হয় এবং এটিকে সকেট বিবরণী বলা হয়। আমি আশা করি তুমি বুঝতে পেরেছ.


7
এছাড়াও, যদি আপনি একবারে প্রচুর ফাইল খোলেন তবে আপনি ফাইল বর্ণনাকারীর বাইরে চলে যেতে পারেন। যা * নিক্স সিস্টেমগুলিকে চলমান থেকে আটকাতে পারে, যেহেতু তারা ডেস্ক্রিপ্টারগুলি /procসর্বদা স্টাফের জন্য খোল ।
স্পেনসার রথবুন

8
@ এরবেনমো: না এটি এক রকম নাও হতে পারে। আপনি যখন ফাইল খুলবেন, অপারেটিং সিস্টেমটি একটি এফডি সরবরাহ করবে যা উপলব্ধ and খোলা ফাইলগুলি ট্র্যাক করার জন্য এর অপারেটিং সিস্টেমের উপায় এবং এটি একটি নির্দিষ্ট ফাইলের সাথে কোনও সম্পর্ক রাখে না।
তাইয়ব

49
" সুতরাং এটি কেবল একটি পূর্ণসংখ্যা নম্বর যা অপারেটিং সিস্টেমের একটি খোলার ফাইলটিকে স্বতন্ত্রভাবে উপস্থাপন করে " "এটি ভুল। সেই পূর্ণসংখ্যাটি কোনও প্রক্রিয়াটির মধ্যে অনন্যভাবে একটি খোলার ফাইলকে উপস্থাপন করে । ফাইল বর্ণনাকারী 0, উদাহরণস্বরূপ, একটি প্রক্রিয়াতে একটি খোলার ফাইল এবং অন্য প্রক্রিয়াতে সম্পূর্ণ ভিন্ন একটি খোলা ফাইল উপস্থাপন করবে।
কিথ থম্পসন

15
@ তৈয়ব: আমি বিশ্বাস করি আপনি ভুল করেছেন। ফাইল বর্ণনাকারী 0, 1, এবং 2 হ'ল স্ট্যান্ডার্ড ইনপুট, স্ট্যান্ডার্ড আউটপুট এবং প্রতিটি চলমান প্রক্রিয়াটির জন্য স্ট্যান্ডার্ড ত্রুটি । একটি সফল প্রাথমিক কল open()আপনাকে ফাইল বর্ণনাকারী 3 দেবে, এমনকি যদি অন্য চলমান প্রক্রিয়াতে কোনও ফাইল বর্ণনাকারী উপস্থিত থাকে 3.. এর পসিক্স সংজ্ঞাটিopen() দেখুন : "উন্মুক্ত () ফাংশনটি নামকৃত ফাইলটির জন্য একটি ফাইল বর্ণনাকারী ফিরিয়ে দেবে যা সর্বনিম্ন ফাইল বিবরণকারী বর্তমানে সেই প্রক্রিয়াটির জন্য খোলা নেই " (সামনে জোর দাও).
কিথ থম্পসন

17
@ কিথথম্পসন: হ্যাঁ আপনি ঠিক বলেছেন। আসলে এটি বিমূর্ততার স্তর সম্পর্কে। প্রকৃতপক্ষে দুটি সারণী রক্ষণাবেক্ষণ করা হয়, যেখানে প্রথমটি প্রক্রিয়া অনুযায়ী এবং দ্বিতীয়টি সিস্টেম প্রশস্ত। প্রতি-প্রক্রিয়া সারণিতে এফডি (অর্থাত্ fdtable) সিস্টেমের প্রশস্ত নয়। তবে এটি ভি-নোড টেবিলের মানচিত্র যা সিস্টেম ব্যাপী অনন্য এন্ট্রি রয়েছে। সুতরাং যখন আপনি বিবরণকারী পরীক্ষা করার জন্য ফোপেন () এবং ফাইলনো () ফাংশন কল করেন তখন আপনি 2 টি পৃথক প্রক্রিয়ায় একই এফডি নম্বর পেতে পারেন কারণ এটি fdtable এর সূচকটি প্রতি-প্রক্রিয়াতে ফেরত দেয়। এটা আনার জন্য ধন্যবাদ!!
তাইয়ব

116

একটি ফাইল বর্ণনাকারী একটি অস্বচ্ছ হ্যান্ডেল যা ফাইল / সকেট সংস্থান সনাক্ত করতে ব্যবহারকারী এবং কার্নেল স্পেসের মধ্যে ইন্টারফেসে ব্যবহৃত হয়। অতএব, আপনি যখন ব্যবহার করেন open()বা socket()(কার্নেলের সাথে ইন্টারফেসের জন্য সিস্টেম কল করে), আপনাকে একটি ফাইল বর্ণনাকারী দেওয়া হয়, এটি একটি পূর্ণসংখ্যা (এটি আসলে আপনার কাঠামোর প্রক্রিয়ায় সূচক হয় - তবে এটি গুরুত্বপূর্ণ নয়)। অতএব, আপনি কার্নেল সাথে সরাসরি ইন্টারফেসে, এর সিস্টেম কল ব্যবহার করতে চান তাহলে read(), write(), close()ইত্যাদি হাতল আপনি ব্যবহার একটি ফাইল বর্ণনাকারী হয়।

সিস্টেম কলগুলিতে বিমূর্ততার একটি স্তর রয়েছে যা stdioইন্টারফেস। এটি বেসিক সিস্টেম কলগুলির চেয়ে বেশি কার্যকারিতা / বৈশিষ্ট্য সরবরাহ করে। এই ইন্টারফেসের জন্য, আপনার অস্বচ্ছ হ্যান্ডেলটি হ'ল এটি FILE*, যা fopen()কল দিয়ে ফিরে আসে । অনেক অনেক ফাংশন ব্যবহার আছে stdioইন্টারফেস fprintf(), fscanf(), fclose(), আপনার জীবন সহজ করতে যা। সি, stdin, stdout, এবং stderrহয় FILE*, ইউনিক্স যথাক্রমে ফাইল বর্ণনাকারী ম্যাপ যা 0, 1এবং 2


6
আমি ব্যক্তিগতভাবে মনে করি যে উত্তরটি উত্তর হিসাবে চিহ্নিত হিসাবে উত্তরের চেয়ে ভাল। সম্মত।
তারিক

101

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

যখন আমরা একটি বিদ্যমান ফাইল খুলি বা একটি নতুন ফাইল তৈরি করি, কার্নেল প্রক্রিয়াটিতে একটি ফাইল বর্ণনাকারীকে ফিরিয়ে দেয়। কার্নেল সমস্ত উন্মুক্ত ফাইল বর্ণনাকারীর একটি সারণী রক্ষণাবেক্ষণ করে যা ব্যবহৃত হয়। ফাইল বর্ণনাকারীদের বরাদ্দ সাধারণত ক্রমযুক্ত এবং এগুলি ফ্রি ফাইল বর্ণনাকারীদের পুল থেকে পরবর্তী ফ্রি ফাইল বর্ণনাকারী হিসাবে ফাইলটিতে বরাদ্দ করা হয়। আমরা যখন ফাইলটি বন্ধ করি তখন ফাইল বর্ণনাকারী মুক্ত হয় এবং আরও বরাদ্দের জন্য উপলব্ধ।
আরও বিশদে এই চিত্রটি দেখুন:

দুটি প্রক্রিয়া

আমরা যখন কোনও ফাইল পড়তে বা লিখতে চাই তখন আমরা ফাইল বর্ণনাকারীর সাহায্যে ফাইলটি সনাক্ত করি যা খোলা () বা ফাংশন কল () দ্বারা ফিরে আসে এবং এটি () বা লেখার জন্য () পড়ার পক্ষে যুক্তি হিসাবে ব্যবহার করি ।
এটি কনভেনশন দ্বারা, ইউনিক্স সিস্টেম শেলগুলি একটি প্রক্রিয়াটির স্ট্যান্ডার্ড ইনপুট সহ ফাইল বর্ণনাকারী 0 , স্ট্যান্ডার্ড আউটপুট সহ ফাইল বর্ণনাকারী 1 এবং স্ট্যান্ডার্ড ত্রুটির সাথে ফাইল বিবরণী 2 সংযুক্ত করে ।
ফাইল বর্ণনাকারী 0 থেকে OPEN_MAX অবধি। ফাইল বিবরণকারী সর্বাধিক মান সঙ্গে প্রাপ্ত করা যেতে পারে ulimit -n। আরও তথ্যের জন্য, এপিইউ বইয়ের তৃতীয় অধ্যায়টি পড়ুন।


1
যেহেতু 0, 1, 2 একটি প্রক্রিয়ার "স্ট্ডিন", "স্ট্ডআউট" এবং "স্ট্ডার" এর সাথে যুক্ত, তাই আমরা কি একই প্রক্রিয়াগুলিতে একই সাথে বিভিন্ন প্রক্রিয়া ব্যবহার করতে পারি?
তারিক

@ তারিক: ফাইল বর্ণনাকারী প্রক্রিয়া অনুসারে হয়। এটি দেখতে, অসচুরিটি ডাউনলোড করুন এবং osqueryi <<< echo '.all process_open_files'ব্যাশ শেলের মধ্যে চালিত করুন
বেন ক্র্যাসি

29

অন্যান্য উত্তরে দুর্দান্ত জিনিস যুক্ত করা হয়েছে। আমি আমার 2 সেন্ট যোগ করব।

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

ফাইল বর্ণনাকারী একটি প্রক্রিয়া আইডিতে আবদ্ধ।

আমরা জানি যে সর্বাধিক বিখ্যাত ফাইল বর্ণনাকারী 0, 1 এবং 2 হয় 0 0 এর সাথে সামঞ্জস্য হয় STDIN, 1 থেকে STDOUTএবং 2 থেকে 2 STDERR

বলুন, শেল প্রক্রিয়াগুলি উদাহরণ হিসাবে গ্রহণ করুন এবং এটি এর জন্য কীভাবে প্রযোজ্য?

এই কোডটি দেখুন

#>sleep 1000 &
[12] 14726

আমরা 14726 (পিআইডি) আইডি দিয়ে একটি প্রক্রিয়া তৈরি করেছি। ব্যবহার করে lsof -p 14726আমরা এই জাতীয় জিনিস পেতে পারি:

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
sleep   14726 root  cwd    DIR    8,1     4096 1201140 /home/x
sleep   14726 root  rtd    DIR    8,1     4096       2 /
sleep   14726 root  txt    REG    8,1    35000  786587 /bin/sleep
sleep   14726 root  mem    REG    8,1 11864720 1186503 /usr/lib/locale/locale-archive
sleep   14726 root  mem    REG    8,1  2030544  137184 /lib/x86_64-linux-gnu/libc-2.27.so
sleep   14726 root  mem    REG    8,1   170960  137156 /lib/x86_64-linux-gnu/ld-2.27.so
sleep   14726 root    0u   CHR  136,6      0t0       9 /dev/pts/6
sleep   14726 root    1u   CHR  136,6      0t0       9 /dev/pts/6
sleep   14726 root    2u   CHR  136,6      0t0       9 /dev/pts/6

চতুর্থতম কলাম এফডি এবং তার পরের কলাম টিওয়াইপি ফাইল বর্ণনাকারী এবং ফাইল বর্ণনাকারী টাইপের সাথে সমান।

এফডির জন্য কয়েকটি মান হতে পারে:

cwd – Current Working Directory
txt – Text file
mem – Memory mapped file
mmap – Memory mapped device

তবে আসল ফাইল বর্ণনাকারী এর অধীনে রয়েছে:

NUMBER – Represent the actual file descriptor. 

সংখ্যার পরে অক্ষর অর্থাৎ "1u", ফাইলটি যে মোডে খোলা থাকে তা উপস্থাপন করে। পড়ার জন্য r, লেখার জন্য ডাব্লু, আপনি পড়তে এবং লেখার জন্য

টিওয়াইপি ফাইলের ধরণ নির্দিষ্ট করে। টিওয়াইপি এর মানগুলির মধ্যে কয়েকটি:

REG – Regular File
DIR – Directory
FIFO – First In First Out

তবে সমস্ত ফাইল বর্ণনাকারী হলেন সিএইচআর - চরিত্রের বিশেষ ফাইল (বা অক্ষর ডিভাইস ফাইল)

এখন আমরা জন্য ফাইল বর্ণনাকারী চিহ্নিত করতে পারেন STDIN, STDOUTএবং STDERRসঙ্গে সহজ lsof -p PID, অথবা আমরা একই যদি আমরা দেখতে পারি ls /proc/PID/fd

নোটটি যে ফাইল বর্ণনাকারী সারণীর ট্র্যাক রাখে তা ফাইল টেবিল বা আইনোড সারণির মতো নয় Note এগুলি পৃথক, যেমন কিছু অন্যান্য উত্তর ব্যাখ্যা করেছে।

এফডি টেবিল

আপনি নিজেকে জিজ্ঞাসা করতে পারেন শারীরিকভাবে এই ফাইল বর্ণনাকারী কোথায় এবং /dev/pts/6উদাহরণস্বরূপ কী সঞ্চিত আছে

sleep   14726 root    0u   CHR  136,6      0t0       9 /dev/pts/6
sleep   14726 root    1u   CHR  136,6      0t0       9 /dev/pts/6
sleep   14726 root    2u   CHR  136,6      0t0       9 /dev/pts/6

ঠিক আছে, /dev/pts/6খাঁটি স্মৃতিতে বেঁচে থাকে। এগুলি নিয়মিত ফাইল নয়, তথাকথিত অক্ষরযুক্ত ডিভাইস ফাইল । আপনি এটি দিয়ে এটি পরীক্ষা করতে পারেন: ls -l /dev/pts/6এবং তারা cআমার ক্ষেত্রে শুরু করবে crw--w----

ওএস যেমন সর্বাধিক লিনাক্সকে স্মরণ করতে সাত ধরণের ফাইল সংজ্ঞায়িত করে:

  • নিয়মিত ফাইল
  • ডিরেক্টরি
  • অক্ষর ডিভাইস ফাইল
  • ডিভাইস ফাইলগুলি অবরুদ্ধ করুন
  • স্থানীয় ডোমেন সকেট
  • নামযুক্ত পাইপ (FIFOs) এবং
  • প্রতীকী লিঙ্কগুলি

1
ধন্যবাদ। প্রকৃতপক্ষে এটি উল্লেখ করা গুরুত্বপূর্ণ যে এটি প্রক্রিয়া অনুসারে! এটি জিনিসগুলিকে আরও ভালভাবে কল্পনা করতে সহায়তা করে।
নিশান্ত

1
ওএস দ্বারা সংজ্ঞায়িত ফাইলগুলির প্রকারগুলি, যা আপনি নিজের উল্লেখ করেছেন বলে উল্লেখ করেছেন, এটি নিম্ন স্তরের ফাইলগুলি বোঝার ক্ষেত্রে সত্যই সহায়তা করে।
রোহন ভলে

20

সম্পর্কিত আরও পয়েন্ট File Descriptor:

  1. File Descriptors(এফডি) হ'ল (0, 1, 2, ...)ফাইলগুলির সাথে সম্পর্কিত নন-নেগেটিভ পূর্ণসংখ্যা ।

  2. 0, 1, 2প্রমাণ এফডি 'থেকে যে অনুরূপ গুলি STDIN_FILENO, STDOUT_FILENOএবং STDERR_FILENO(সংজ্ঞায়িত unistd.h) শেল যখন প্রোগ্রাম আরম্ভ পক্ষে ডিফল্টরূপে খুলে দিয়েছিল।

  3. সিক্যুয়াল অর্ডারে এফডি বরাদ্দ করা হয়, যার অর্থ সর্বনিম্ন সম্ভাব্য অব্যবহৃত পূর্ণসংখ্যার মান।

  4. কোনও নির্দিষ্ট প্রক্রিয়ার জন্য এফডি এর /proc/$pid/fd(ইউনিক্স ভিত্তিক সিস্টেমে) দেখা যায় ।


16

অন্যান্য উত্তরের সংযোজন হিসাবে, ইউনিক্স সবকিছুকে একটি ফাইল সিস্টেম হিসাবে বিবেচনা করে। আপনার কীবোর্ড এমন একটি ফাইল যা কেবল কার্নেলের দৃষ্টিকোণ থেকে পঠিত হয়। স্ক্রিনটি কেবল একটি লেখার ফাইল। একইভাবে, ফোল্ডার, ইনপুট-আউটপুট ডিভাইস ইত্যাদিও ফাইল হিসাবে বিবেচিত হয়। যখনই কোনও ফাইল খোলা থাকে, যখন ডিভাইস ড্রাইভাররা [ডিভাইস ফাইলগুলির জন্য] একটি খোলার অনুরোধ জানায় (), বা কোনও প্রক্রিয়া কোনও ব্যবহারকারী ফাইল খুললে কার্নেল একটি ফাইল বর্ণনাকারী বরাদ্দ করে, এমন একটি পূর্ণসংখ্যা যা কেবলমাত্র সেগুলি পড়ার জন্য এই ফাইলটির অ্যাক্সেস নির্দিষ্ট করে inte , কেবল লিখুন ইত্যাদি reference [রেফারেন্সের জন্য: https://en.wikedia.org/wiki/ সব কিছুই_আইস_এ_ফাইল ]


ফাইল বর্ণনাকারী এমন জিনিসগুলিকেও উল্লেখ করতে পারে যা ফাইল সিস্টেমে অজ্ঞাতনামা পাইপ এবং নেটওয়ার্ক সকেটের মতো বিদ্যমান না।
kbolino

12

ফাইল বর্ণনাকারী (এফডি):

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

    ত্রুটি পুনঃনির্দেশ:
    আপনি যখনই কোনও প্রোগ্রাম / কমান্ড টার্মিনালে চালিত করেন তখন 3 টি ফাইল সর্বদা খোলা থাকে
    1. স্ট্যান্ডার্ড ইনপুট
    2. স্ট্যান্ডার্ড আউটপুট
    3. মান ত্রুটি.

    যখনই কোনও প্রোগ্রাম চালানো হয় তখন এই ফাইলগুলি সর্বদা উপস্থিত থাকে। যেমন কোনও ফাইল বর্ণনাকারীর আগে ব্যাখ্যা করা হয়েছে, এই প্রতিটি ফাইলের সাথে সম্পর্কিত।
    ফাইল                                        ফাইল বর্ণনাকারী
    স্ট্যান্ডার্ড ইনপুট STDIN 0
    স্ট্যান্ডার্ড আউটপুট
    STDOUT 1 স্ট্যান্ডার্ড ত্রুটি STDERR 2

  • উদাহরণস্বরূপ, ফাইলগুলি অনুসন্ধান করার সময়, একজন সাধারণত ত্রুটি বা অন্য কোনও ধরণের ত্রুটি অস্বীকার করার অনুমতি পায়। এই ত্রুটিগুলি একটি নির্দিষ্ট ফাইলে সংরক্ষণ করা যায়।
    উদাহরণ 1

s ls mydir 2> त्रुटीfile.txt

স্ট্যান্ডার্ড ত্রুটির ফাইল ডেস্ক্রিপ্টর ২ টি।
যদি মাইডির নামে কোনও ডিরেক্টরি না থাকে তবে কমান্ডের আউটপুট ফাইল
ত্রুটি-রক্ষিত হবে। "2>" ব্যবহার করে আমরা ত্রুটি আউটপুটটিকে "ত্রুটি ফাইল" নামে পুনরায় নির্দেশ করি। txt "
সুতরাং, প্রোগ্রাম আউটপুট ত্রুটি দিয়ে বিশৃঙ্খলা হয় না।

আমি আপনার উত্তর পেয়েছি আশা করি।


5

যে কোনও অপারেটিং সিস্টেমে প্রসেস (পি এর) চলছে, বলুন পি 1, পি 2, পি 3 এবং আরও বলুন। প্রতিটি প্রক্রিয়া সাধারণত ফাইলগুলির একটি চলমান ব্যবহার করে।

প্রতিটি প্রক্রিয়া একটি প্রক্রিয়া গাছ (বা একটি প্রক্রিয়া টেবিল, অন্য ফ্রেসিংয়ে থাকে) নিয়ে গঠিত।

সাধারণত, অপারেটিং সিস্টেমগুলি প্রতিটি প্রক্রিয়াতে প্রতিটি ফাইলকে একটি সংখ্যার দ্বারা প্রতিনিধিত্ব করে (যা প্রতিটি প্রক্রিয়া গাছ / সারণীতে বলা হয়)।

প্রথম প্রক্রিয়ায় ব্যবহৃত ফাইল file0 , দ্বিতীয় file1 , তৃতীয় file2 , এবং তাই ঘোষণা।

এ জাতীয় যে কোনও সংখ্যা ফাইল বিবরণকারী des

ফাইল বর্ণনাকারীরা সাধারণত পূর্ণসংখ্যা হয় (0, 1, 2 এবং 0.5, 1.5, 2.5 নয়)।

প্রদত্ত আমরা প্রায়শই প্রসেসগুলি "প্রক্রিয়া-সারণী" হিসাবে বর্ণনা করি এবং এই সারণিতে সারি রয়েছে (এন্ট্রি) আমরা বলতে পারি যে প্রতিটি এন্ট্রিতে ফাইল বর্ণনাকারী সেল পুরো প্রবেশকে উপস্থাপন করতে ব্যবহার করে।

একইভাবে, আপনি যখন কোনও নেটওয়ার্ক সকেট খুলেন, তখন এটিতে সকেট বর্ণনাকারী থাকে।

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

ফাইল বর্ণনাকারীরা বিশ্বব্যাপী হতে পারে (প্রক্রিয়া এ 0 বলার আগে শুরু হয় এবং 1 এ শেষ হয়; প্রসেস বি 2 তে বলে শুরু হয় এবং 3 এ শেষ হয়) এবং এর আগেও, তবে যতদূর আমি জানি, সাধারণত আধুনিক অপারেটিং সিস্টেমে ফাইল বর্ণনাকারী বিশ্বব্যাপী নয়, এবং প্রকৃতপক্ষে প্রক্রিয়া-নির্দিষ্ট (প্রক্রিয়া এ 0 বলে শুরু হয় এবং 5 এ শেষ হয়, যখন প্রক্রিয়া বি 0 তে শুরু হয় এবং 10 এ শেষ হয়)।


এখানে লিনাক্সের এফডি সম্পর্কে আরও পড়ুন: unix.stackexchange.com/questions/358022/…

1
দুর্দান্ত উত্তর :)
নম্র_উल्फ

5

ফাইল বর্ণনাকারী

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

1

সরলিকৃত সমস্ত প্রতিক্রিয়ার উপরে যোগ করুন।
আপনি যদি ব্যাশ স্ক্রিপ্টে ফাইলগুলির সাথে কাজ করছেন তবে ফাইল বিবরণী ব্যবহার করা আরও ভাল।
উদাহরণস্বরূপ: -
আপনি "test.txt" ফাইলটি / পড়তে এবং লিখতে চান।
নীচের শো হিসাবে ফাইল বিবরণকারী ব্যবহার করুন

FILE=$1 # give the name of file in the command line
exec 5<>$FILE # '5' here act as the file descriptor
# Reading from the file line by line using file descriptor
while read LINE; do
    echo "$LINE"
done <&5

# Writing to the file using descriptor
echo "Adding the date: `date`" >&5 
exec 5<&- # Closing a file descriptor

-5

ফাইল বর্ণনাকারী একটি ফাইলের বর্ণনাকারী। তারা একটি ফাইল লিঙ্ক দেয়। তাদের সহায়তায় আমরা একটি ফাইল পড়তে, লিখতে এবং খুলতে পারি।

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