الدرس 16: File Descriptors — open, read, write
كل ملف أو pipe أو socket أو device يصل إليه برنامج في Linux يُمثَّل بوصفه file descriptor — عدد صحيح صغير يشير إلى مدخل في جدول الملفات الخاص بالعملية. الاستدعاءات open و read و write و close و lseek هي أبسط أوليّات الإدخال/الإخراج (I/O) في POSIX. في NVIDIA، تمر ملفات checkpoint الخاصة بالنماذج، وسج
الـ file descriptor يشبه رقم طاولة في مطعم: لست بحاجة لتذكّر عنوان المطبخ — فقط أعطِ الرقم وسيعرف الـ OS بالضبط أي ملف تقصد.
- file descriptor
- عدد صحيح صغير غير سالب يُعرِّف ملفًا مفتوحًا داخل عملية. stdin=0 و stdout=1 و stderr=2. open() يُرجِع أدنى FD متاح.
- open
- استدعاء نظام يفتح ملفًا ويُرجِع file descriptor. يأخذ مسارًا، وأعلامًا (O_RDONLY, O_WRONLY, O_CREAT, O_TRUNC)، و mode لإنشاء ملفات جديدة.
- read
- استدعاء نظام يقرأ حتى n بايت من file descriptor إلى buffer. يُرجِع عدد البايتات المقروءة فعليًا، 0 عند EOF، و -1 عند الخطأ.
- write
- استدعاء نظام يكتب n بايت من buffer إلى file descriptor. يُرجِع عدد البايتات المكتوبة فعليًا — قد يكتب أقل مما طُلب.
- lseek
- استدعاء نظام يُعيد تحديد موضع file offset الخاص بـ descriptor. يتيح قراءة/كتابة بالوصول العشوائي داخل ملف. SEEK_SET و SEEK_CUR و SEEK_END هي قيم whence.