1. Linux系統調用
Linux系統調用(system call)是指操作系統提供給用戶程序的一組“特殊接口”,用戶程序可以通過這組“特殊”接口來獲得操作系統提供的特殊服務。
為了更好的保護內核空間,將程序的運行空間分為內核空間和用戶空間,他們運行在不同的級別上,在邏輯上是相互隔離的。在Linux中,用戶程序不能直接訪問內核提供的服務,必須通過系統調用來使用內核提供的服務。
Linux中的用戶編程接口(API)遵循了UNIX中最流行的應用編程界面標准——POSIX。這些系統調用編程接口主要是通過C庫(libc)實現的。
2. 文件描述符
對內核而言,所有打開文件都由文件描述符引用。文件描述符是一個非負整數。
在linux中文件描述符的范圍是0~OPEN_MAX。
當打開一個現存文件或創建一個新文件時,內核向進程返回一個文件描述符。當寫一個文件時,用open或create返回的文件描述符標識該文件,將其作為參數傳送給read或write。
在POSIX應用程序中,整數0、1、2應被代換成符號常數:
STDIN_FILENO(標准輸入,默認是鍵盤) STDOUT_FILENO(標准輸出,默認是屏幕) STDERR_FILENO(標准錯誤輸出,默認是屏幕),這些內容通常定義在 </usr/include/unistd.h>中。
Linux中每個進程在創建時,都會打開三個文件,這三個文件就是stdin、stdout、stderr,他們對應的文件描述符為0、1、2。在默認情況下使用open()打開文件時,分配的是最小未用文件描述符。
3. Liunx文件I/O
文件I/O沒有緩沖
不帶緩沖是指每個read和write都是調用內核中相應的系統調用。
不帶緩沖的I/O函數不是ANSI C的組成部分,但是是POSIX和XPG3的組成部分。
文件I/O通過文件描述符來訪問文件
4. 常用文件I/O
可用的文件I/O函數很多,包括:打開文件,讀文件,寫文件等。大多數Linux文件I\O只需要用到5個函數:open,read,write,lseek以及close。