要去訪問磁盤的文件,必須通過系統調用來返回一個與該文件相關聯的ID,
這個ID就是文件描述符file descriptor
linux操作系統提供了一個open系統調用,任何進程要去訪問一個文件,首先使用這個open打開這個
文件,系統將返回一個編號,及與這個文件相關聯的文件描述符
(1)用戶程序從用戶從用戶空間向內核提交了打開申請
(2)操作系統會在內核中去檢查請求是否合法,如果合法在內核中申請打開文件相關聯信息(讀寫位置,在磁盤中的位置,全用struct file來存儲)並且添加到當前進程的PCB打開文件列表數組中,對應的這個數組小標及文件描述符
(3)將文件描述符返回非用空間,用戶空間接下來對這個文件進行讀寫就是通過這個編號值
---------------------------------------------------------------------------------------------------------------------------------------------------------
系統默認為每個進程打開了三個文件:
printf/scanf:
文件描述符值0(標准輸入,鍵盤)
1(標准輸出,顯示器)
2(標准錯誤輸出,顯示器)
相應的宏
STDIN_FILENO
STDOUT_FILENO
STDERR_FILENO