منبع اصلی نوشتار زیر در این لینک قرار دارد

توصیف‌گرهای فایل


توصیف‌گرهای فایل

یک توصیف‌گر فایل‎(FD)‎ یک عدد است که به یک فایل باز اشاره می‌کند. هر پردازش مجموعه توصیف‌گرهای فایل اختصاصی خود را دارد، اما FDها از پردازش پدر به پردازشهای فرزند به ارث می‌رسند.

هر پردازشی سه FD را از پدرش به ارث خواهد برد: 0 (ورودی استاندارد)، باز برای خواندن، و 1 (خروجی استاندارد)، و 2 (خطای استاندارد) باز برای نوشتن. پردازشی که بدون یکی از اینها یا بیشر، شروع بشود ممکن است به طور غیر قابل پیش‌بینی رفتار کند. (بنابراین هرگز stderr را نبندید. به جای آن همیشه به ‎/dev/null‎ هدایت نمایید.)

امکان دارد پردازشها چنانکه لازم باشد (تا هر اندازه‌ای که محدودیت آن را سیستم عامل تحمیل کند) توصیف‌گر فایل اضافه باز کنند. در اکثر زبانها، وقتی شما فایل جدیدی باز می‌کنید، شماره FD که سیستم عامل انتحاب می‌کند به شما مسترد می‌شود (یا یک کتابخانه شماره FD را مدیریت می‌کند و جزئیات را پنهان می‌سازد). اگر چه، در اسکریپت‌های پوسته، الگو متفاوت است: شما اول شماره FD را انتخاب می‌کنید، و سپس فایل را برای استفاده از آن توصیف‌گر، باز می‌کنید. این یعنی شما به عنوان نویسنده اسکریپت، باید از آن FDهایی که در حال استفاده برای هر وظیفه‌ای هستید، پیوسته آگاهی داشته باشید.

پوسته‌ها برای کار با توصیف‌گرهای‌فایل از تغییر مسیر استفاده می‌کنند. برای FDهای از قبل موجود، با استفاده از ترکیب دوتایی کردن توصیف‌گرفایل، خروجی می‌تواند، به آنها ارسال گردد, یا ورودی می‌تواند از آنها خوانده شود:

echo "unexpected error: $foo" 1>&2

while read -r line 0<&3; do ...

ادامه مطلب