অন্যান্য উত্তরগুলি হ'ল ওভারসিম্প্লিফিকেশন, প্রতিটি গল্পের কেবলমাত্র অংশ উপস্থাপন করে এবং কয়েকটি পয়েন্টে ভুল।
আছে দুই উপায়ে কাজ ডিরেক্টরি ট্র্যাক হয়:
- প্রতিটি প্রক্রিয়াটির জন্য, কার্নেল-স্পেস ডেটা স্ট্রাকচারে যে প্রক্রিয়াটি উপস্থাপিত হয়, কার্নেলটি সেই ডিরেক্টরিটির কার্যনির্বাহী এবং তার প্রক্রিয়ার জন্য মূল ডিরেক্টরিটির ভনোডের দুটি ভনোড উল্লেখ সংরক্ষণ করে। সাবেক রেফারেন্স দ্বারা সেট করা হয়
chdir()
এবং fchdir()
সিস্টেম কল, দ্বারা আধুনিক chroot()
। এগুলি প্রত্যক্ষভাবে পরোক্ষভাবে দেখতে পাবেন/proc
লিনাক্স অপারেটিং সিস্টেমগুলিতে বা fstat
ফ্রিবিএসডি- র কমান্ডের মাধ্যমে এবং :% fstat -p $$ | মাথা -n 5
ব্যবহারকারী সিএমডি পিআইডি এফডি মাউন্ট ইনম মোড এসজেড | ডিভি আর / ডাব্লু
জেডিবিপি zsh 92648 পাঠ / 24958 -r-xr-xr-x 702360 আর
জেডিবিপি zsh 92648 সিটি / দেব 148 ক্রু - ডাব্লু ---- পিটিএস / 4 আরডাব্লু
JdeBP zsh 92648 wd / usr / home / JdeBP 4 drwxr-xr-x 124 r
জেডিবিপি zsh 92648 মূল / 4 drwxr-xr-x 35 আর
%
পাথনাম রেজোলিউশনটি যখন চালিত হয়, সেই পথটি আপেক্ষিক বা পরম কিনা তা অনুসারে, এই রেফারেন্সড ভনোডগুলির এক বা অন্যটিতে শুরু হয়। ( …at()
সিস্টেম কলগুলির একটি পরিবার রয়েছে যা তৃতীয় বিকল্প হিসাবে একটি ওপেন (ডিরেক্টরি) ফাইল বর্ণনাকারী দ্বারা উল্লিখিত vnode থেকে পথের নামটি শুরু করার অনুমতি দেয়))
মাইক্রোকারেল ইউনিসে ডেটা স্ট্রাকচার প্রয়োগের জায়গাতে থাকে তবে এই ডিরেক্টরিগুলির জন্য খোলা রেফারেন্স রাখার নীতিটি একই থাকে।
- অভ্যন্তরীণভাবে, এই ধরনের টু Z, Korn থেকে, বোর্ন আবার, C, Almquist শেল হিসাবে শাঁস মধ্যে শেল অতিরিক্ত কাজ ডিরেক্টরি অভ্যন্তরীণ স্ট্রিং ভেরিয়েবলের স্ট্রিং ম্যানিপুলেশন ব্যবহার ট্র্যাক রাখে। এটি যখনই কল করার কারণ রয়েছে এটি এটি করে
chdir()
।যদি কোনও আপেক্ষিক পথের নামের সাথে পরিবর্তিত হয়, তবে সেই নামটি যুক্ত করতে স্ট্রিংটি ম্যানিপুলেট করে। যদি কোনও একটি পরম পথের নাম পরিবর্তিত হয় তবে এটি স্ট্রিংটিকে নতুন নামের সাথে প্রতিস্থাপন করে। উভয় ক্ষেত্রেই, এটি স্ট্রিংটি অপসারণ .
এবং ..
উপাদানগুলিকে সংযুক্ত করে এবং প্রতীকী লিঙ্কগুলি তাদের লিঙ্ক-টু নামের সাথে প্রতিস্থাপনের জন্য তাড়াতে সামঞ্জস্য করে । ( উদাহরণস্বরূপ, এটির জন্য জেড শেলের কোড এখানে )
অভ্যন্তরীণ স্ট্রিং ভেরিয়েবলের নামটি শেল ভেরিয়েবলPWD
(বা cwd
সি শেলগুলিতে) দ্বারা ট্র্যাক করা হয় । PWD
শেল দ্বারা তৈরি প্রোগ্রামগুলিতে এটি পরিবেশগত পরিবর্তনশীল (নামকরণ ) হিসাবে প্রচলিত রফতানি হয় ।
কিছু ট্র্যাকিং এই দুটি পদ্ধতি দ্বারা প্রকাশ করা হয় -P
এবং -L
অপশন cd
এবং pwd
শেল বিল্ট-ইন কমান্ড ও শেল 'বিল্ট-ইন মধ্যে পার্থক্য দ্বারা pwd
কমান্ড এবং উভয় /bin/pwd
কমান্ড বিল্ট-ইন pwd
ভালো জিনিস কমান্ড (অন্যদের মধ্যে) ভিআইএম এবং নিওভিম।
% এমকিডির এ; ln -sab
% (সিডি বি; পিডব্লিউডি; / বিন / পিডাব্লুডি; প্রিন্টেনভ পিডাব্লুডি)
, / Usr / হোম / JdeBP / খ
, / Usr / হোম / JdeBP / একটি
, / Usr / হোম / JdeBP / খ
% (সিডি বি; পিডব্লিউডি-পি; / বিন / পিডব্লুডেপি)
, / Usr / হোম / JdeBP / একটি
, / Usr / হোম / JdeBP / একটি
% (সিডি বি; পিডব্লিউড-এল; / বিন / পিডব্লিউড-এল)
, / Usr / হোম / JdeBP / খ
, / Usr / হোম / JdeBP / খ
% (সিডি -পি বি; পিডাব্লুডি; / বিন / পিডব্লিউডি; প্রিন্টেনভ পিডাব্লুডি)
, / Usr / হোম / JdeBP / একটি
, / Usr / হোম / JdeBP / একটি
, / Usr / হোম / JdeBP / একটি
% (সিডি বি; পিডাব্লুডি = / হ্যালো / সেখানে / বিন / পিডাব্লুডল)
, / Usr / হোম / JdeBP / একটি
%
যেমন আপনি দেখতে পাচ্ছেন: "লজিকাল" ওয়ার্কিং ডিরেক্টরি প্রাপ্ত করা PWD
শেল ভেরিয়েবলটি দেখার বিষয় (বা শেল প্রোগ্রামটি না হলে পরিবেশ পরিবর্তনশীল); যদিও "ফিজিক্যাল" ওয়ার্কিং ডিরেক্টরি পাওয়া getcwd()
লাইব্রেরির ফাংশনকে কল করার বিষয় ।
বিকল্পটি ব্যবহার করার সময় /bin/pwd
প্রোগ্রামটির ক্রিয়াকলাপটি -L
কিছুটা সূক্ষ্ম। এটি উত্তরাধিকার সূত্রে প্রাপ্ত পরিবেশের পরিবর্তনশীলের মানকে বিশ্বাস করতে পারে নাPWD
। সর্বোপরি, এটি শেল দ্বারা চালিত হওয়া উচিত নয় এবং অন্তর্বর্তী প্রোগ্রামগুলি PWD
পরিবেশকে পরিবর্তনশীল করার শেলটির প্রক্রিয়াটি সর্বদা কার্যক্ষম ডিরেক্টরিটির নাম অনুসরণ করতে পারে না । অথবা কেউ কেবল সেখানে যা করতে পারে তা করতে পারে।
সুতরাং এটি কী করে তা (পসিক্স স্ট্যান্ডার্ড যেমনটি বলেছে) যাচাই করে দেখুন যে প্রদত্ত নামটি PWD
একই নাম হিসাবে একই ফলন করেছে .
যা সিস্টেম কল ট্রেসের সাহায্যে দেখা যায়:
% ln -sac
% (সিডি বি; ট্রাস / বিন / pwd -L 3> & 1 1> & 2 2> & 3 | গ্রেপ-ই '^ স্ট্যাট | __getcwd')
স্ট্যাটাস ("/ usr / home / JdeBP / b", { মোড = drwxr-xr-x, inode = 120932, আকার = 2, blksize = 131072}) = 0 (0x0)
স্ট্যাট ("।", {মোড = drwxr-xr-x, ইনোড = 120932, আকার = 2, blksize = 131072}) = 0 (0x0)
, / Usr / হোম / JdeBP / খ
% (সিডি বি; পিডাব্লুডি = / ইউএসআর / লোকাল / ইত্যাদি ট্রাস / বিন / পিডব্লু-এল 3> & 1 1> & 2 2 & & 3 | গ্রেপ-ই '^ স্ট্যাট | __getcwd')
স্ট্যাটাস ("/ usr / স্থানীয় / ইত্যাদি" , {মোড = drwxr-xr-x, ইনোড = 14835, আকার = 158, blksize = 10240}) = 0 (0x0)
স্ট্যাট ("।", {মোড = drwxr-xr-x, ইনোড = 120932, আকার = 2 , blksize = 131072}) = 0 (0x0)
__getcwd ("/ usr / home / JdeBP / a", 1024) = 0 (0x0)
, / Usr / হোম / JdeBP / একটি
% (সিডি বি; পিডাব্লুডি = / হ্যালো / সেখানে ট্রাস / বিন / পিডব্লুড-এল 3> & 1 1> & 2 2 & & 3 | গ্রেপ-ই '^ স্ট্যাট | __getcwd')
স্ট্যাটাস ("/ হ্যালো / সেখানে", 0x7fffffffe730) ইআরআর # 2 'এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই'
__getcwd ("/ usr / home / JdeBP / a", 1024) = 0 (0x0)
, / Usr / হোম / JdeBP / একটি
% (সিডি বি; পিডাব্লুডি = / ইউএসআর / হোম / জেডিবিপি / সি ট্রাস / বিন / পিডব্লু-এল 3> & 1 1> & 2 2> & 3 | গ্রেপ-ই '^ স্ট্যাট | __getcwd')
স্ট্যাটাস ("/
ইউএসআর / হোম / জেডিবিপি / সি ", {মোড = ড্রওএক্সআর-এক্সআর-এক্স, ইনোড = 120932, আকার = 2, ব্লকসাইজ = 131072}) = 0 (0x0) স্ট্যাট ("। ", {মোড = ড্রওএক্সআর-এক্সআর-এক্স, ইনোড = 120932 , আকার = 2, blksize = 131072}) = 0 (0x0)
, / Usr / হোম / JdeBP / C
%
যেমন আপনি দেখতে পাচ্ছেন: এটি কেবল তখনই কল করে getcwd()
যখন এটি কোনও অমিল সনাক্ত করে; এবং এটি PWD
স্ট্রিংয়ে সেট করে বোকা বানানো যেতে পারে যা প্রকৃতপক্ষে একই ডিরেক্টরিটির নাম দেয়, তবে অন্য কোনও রুট দিয়ে।
getcwd()
লাইব্রেরি ফাংশন তার নিজের অধিকার একটি বিষয়। তবে প্রিসিসের কাছে:
নেভিগেট করা ..
আবার তার নিজস্ব বিষয়। আরেকটি সারসংক্ষেপ: ডিরেক্টরি সাধারনত (যদিও হিসাবে ইতিমধ্যে, এই হয় উল্লিখিত যদিও না প্রকৃত ধারণ প্রয়োজন) ..
ডিস্ক উপর ডিরেক্টরির ডাটা স্ট্রাকচার, কার্নেল প্রতিটি ডিরেক্টরির vnode নিজেই পেরেন্ট ডাইরেক্টরি ট্র্যাক করে এবং এইভাবে নেভিগেট করতে পারেন ..
কোনো vnode ওয়ার্কিং ডিরেক্টরি। এটি মাউন্টপয়েন্ট এবং পরিবর্তিত মূল প্রক্রিয়াগুলি দ্বারা কিছুটা জটিল, যা এই উত্তরের ক্ষেত্রের বাইরে।
সরাইয়া
উইন্ডোজ এনটি আসলে একই কাজ করে। প্রসেস প্রতি একক ওয়ার্কিং ডিরেক্টরি রয়েছে, SetCurrentDirectory()
এটিপি কল দ্বারা সেট এবং সেই ডিরেক্টরিতে কোনও (অভ্যন্তরীণ) ওপেন ফাইল হ্যান্ডেলের মাধ্যমে কার্নেল দ্বারা ট্র্যাক করা প্রতিটি প্রক্রিয়া; এবং পরিবেশের ভেরিয়েবলগুলির একটি সেট রয়েছে যা উইন 32 প্রোগ্রামগুলি (কেবল কমান্ড ইন্টারপ্রেটার নয়, তবে সমস্ত উইন 32 প্রোগ্রাম) একাধিক ওয়ার্কিং ডিরেক্টরী (প্রতিটি ড্রাইভের জন্য) এর নামগুলি ট্র্যাক করতে ব্যবহার করে, যখনই তারা ডিরেক্টরি পরিবর্তন করে সেগুলিতে সংযোজন বা ওভাররাইট করে।
প্রচলিতভাবে, ইউনিক্স এবং লিনাক্স অপারেটিং সিস্টেমের ক্ষেত্রে বিপরীতে, উইন 32 প্রোগ্রামগুলি ব্যবহারকারীদের কাছে এই পরিবেশের পরিবর্তনশীলগুলি প্রদর্শন করে না। উইন্ডোজ এনটি-তে চলমান ইউনিক্সের মতো সাবসিস্টিমে কেউ কখনও কখনও সেগুলি দেখতে পাবে, তবুও কমান্ড দোভাষীদের SET
কমান্ডকে একটি বিশেষ উপায়ে ব্যবহার করে।
আরও পড়া