שיעור 16: File Descriptors — open, read, write
כל קובץ, pipe, socket ו-device שתוכנה ניגשת אליו ב-Linux מיוצג כ-file descriptor — מספר שלם קטן שמצביע לרשומה בטבלת הקבצים של התהליך. הקריאות open, read, write, close ו-lseek הן הפרימיטיבים הבסיסיים ביותר ב-POSIX I/O. ב-NVIDIA, קבצי checkpoint של מודלים, לוגים של nvcc ופלטים של CUDA kernels כולם עוב
file descriptor הוא כמו מספר שולחן במסעדה: אתה לא צריך לזכור את הכתובת של המטבח — רק תגיד מספר ו-OS יודע בדיוק לאיזה קובץ אתה מתכוון.
- file descriptor
- מספר שלם לא-שלילי קטן שמזהה קובץ פתוח בתוך תהליך. stdin=0, stdout=1, stderr=2. open() מחזיר את ה-FD הנמוך ביותר הפנוי.
- open
- קריאת מערכת שפותחת קובץ ומחזירה file descriptor. מקבלת נתיב, flags (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 values.