ওএস এক্স-তে , লিনাক্স ব্যতীত যে সমস্ত সিস্টেমে তারা সমর্থিত সেখানে ওপেন করানো সমান, ফলস্বরূপ এফডি কম-বেশি পয়েন্টগুলি একইভাবে ওপেন ফাইল বর্ণনার জন্য কমপক্ষে পয়েন্ট /dev/fd/x
হ'ল dup(x)
এবং বিশেষত ফাইলের মধ্যে একই অফসেট থাকবে।
লিনাক্স এখানে ব্যতিক্রম। লিনাক্সে, এফডি এক্স-এ খোলা ফাইলটির /dev/fd/x
একটি সিডিমিংক /proc/self/fd/x
এবং /proc/self/fd/x
সিউডো-সিএমিলিংক। লিনাক্স উপর যখন আপনি একটি না open("/dev/fd/x", somemode)
, আপনি একটি ব্র্যান্ড নতুন পেতে খোলা ফাইল বিবরণ খোলা হিসাবে একই ফাইলে x
। আপনার প্রাপ্ত নতুন এফডি কোনওভাবেই এফডি এক্স এর সাথে সম্পর্কিত নয়। বিশেষত, অফসেটটি ফাইলের শুরুতে হবে (যদি আপনি O_APPEND
অবশ্যই এটি খুলুন তবে ) এবং মোড (পড়ুন / লিখুন / সংযোজন করুন ...) এফডি এক্স-এর চেয়ে আলাদা হতে পারে (আপনি এমনকি পেতে পারেন) বিপরীত মোডে খোলার সময় পাইপের অন্য প্রান্তের মতো, এফডি এক্সে থাকা থেকে কিছু আলাদা) (এর অর্থ হ'ল এটি সকেটের জন্য কাজ করে না যা উদাহরণস্বরূপ আপনি খুলতে পারবেন না ) ( )।
সুতরাং, লিনাক্স-এ, যখন আপনি করেন
exec 5<> file
echo test >&5
এফডি 5 এর অফসেটটি ফাইলের শেষে রয়েছে। যদি তুমি করো
cat <&5
আপনি কিছুই পান না।
তবুও আপনি যখন করবেন:
cat /dev/fd/5
আপনি দেখুন test
কারণ cat
একটি নতুন পঠনযোগ্য এফডি file
এফডি 5 এর সাথে সম্পর্কিত নয়।
অন্যান্য সিস্টেমে, উপর
cat /dev/fd/5
cat
একটি এফডি পায় যা এফডি 5 এর সদৃশ, তাই এখনও ফাইলের শেষে একটি অফসেট সহ।
কারণ কেন এটিকে সাথে কাজ করে less
যে কোনো কারণে, হয় less
একটি করে lseek()
(ক নেই ফাইলের শুরুতে যে FD উপর lseek(1); lseek(0)
কিনা তা নির্ধারণ করতে ফাইল seekable কি না)।
এখানে, আপনি সম্ভবত পড়ার জন্য একটি এফডি এবং একটি লেখার জন্য চান যদি আপনি উভয়ই আলাদা অফসেট রাখতে চান:
exec 5< file 9>&1 > file
অথবা আপনি যদি এখনও সেখানে থাকেন তবে ফাইলটি আবার খুলতে হবে, বা একটি lseek()
কাজ less
করতে হবে।
ksh93
এবং zsh
বিল্টিন lseek()
অপারেটর সহ একমাত্র শেলগুলি যদিও:
cat <&5 <#((0)) # ksh93
{sysseek 0; cat} <&5 # zsh, zmodload zsh/system to enable that builtin
বা:
cat /dev/fd/5 5<#((0)) # ksh93
sysseek -u 5 0; cat /dev/fd/5 # zsh