1 . 建立
int creat(const char *filename, mode_t mode);
參數 mode 指定新建文件的存取權限,它同 umask 一塊兒決定文件的最終權限( mode&umask),
其中 umask 表明了文件在建立時須要去掉的一些存取權限。 umask 可經過系統調用 umask()來改變:
int umask(int newmask);
該調用將 umask 設置爲 newmask,而後返回舊的 umask,它隻影響讀、寫和執行權限。
2. 打開
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
open()函數有兩個形式,其中 pathname 是咱們要打開的文件名 ( 包含路徑名稱,缺省是認爲
在當前路徑下面), flags 能夠是以下 所示的一個值或者是幾個值的組合。 函數
文件打開標誌spa |
標 志 含 義指針 |
O_RDONLYit |
以只寫的方式打開文件table |
O_WRONLYtest |
以只讀的方式打開文件file |
O_RDWR 權限 |
以讀寫的方式打開文件margin |
O_APPEND top |
以追加的方式打開文件 |
O_EXEC |
若是使用了 O_CREAT 並且文件已經存在,就會發生一個錯誤 |
O_CREAT |
建立一個文件 |
O_NOBLOCK |
以非阻塞的方式打開一個文件 |
O_TRUNC |
若是文件已經存在,則刪除文件的內容 |
O_RDONLY、 O_WRONLY、 O_RDWR 三個標誌只能使用任意的一個。
若是使用了 O_CREATE 標誌,則使用的函數是 int open(const char *pathname,int flags,mode_tmode); 這個時候咱們還要指定 mode 標誌,用來表示文件的訪問權限。
Linux用 5 個數字來表示文件的各類權限:第一位表示設置用戶 ID;第二位表示設置組 ID;第三位表示用戶本身的權限位;第四位表示組的權限;最後一位表示其餘人的權限。每一個數字能夠取 1(執
行權限)、 2(寫權限)、 4(讀權限)、 0(無)或者是這些值的和。例如,要建立一個用戶可讀、可寫、可執行,可是組沒有權限,其餘人能夠讀、能夠執行的文件,並設置用戶 ID 位。那麼,
咱們應該使用的模式是 1 (設置用戶 ID)、 0(不設置組 ID)、 7( 1+2+4,讀、寫、執行)、 0(沒有權限)、 5( 1+4,讀、執行)
即 10 705:open("test", O_CREAT, 10 705);
上述語句等價於:
open("test", O_CREAT, S_IRWXU | S_IROTH | S_IXOTH | S_ISUID );
若是文件打開成功, open 函數會返回一個文件描述符,之後對該文件的全部操做就能夠經過
對這個文件描述符進行操做來實現。
3. 讀寫
在文件打開之後,咱們纔可對文件進行讀寫, Linux 中提供文件讀寫的系統調用是 read、 write
函數:
int read(int fd, const void *buf, size_t length);
int write(int fd, const void *buf, size_t length);
其中 參數 buf 爲指向緩衝區的指針, length 爲緩衝區的大小(以字節爲單位)。函數 read()實
現從文件描述符 fd 所指定的文件中讀取 length 個字節到 buf 所指向的緩衝區中,返回值爲實際讀
取的字節數。函數 write 實現將把 length 個字節從 buf 指向的緩衝區中寫到文件描述符 fd 所指向
的文件中,返回值爲實際寫入的字節數。
以 O_CREAT 爲標誌的 open 實際上實現了文件建立的功能,所以,下面的函數等同 creat()函數:
int open(pathname, O_CREAT | O_WRONLY | O_TRUNC, mode);
4. 定位
lseek()將文件讀寫指針相對 whence 移動 offset 個字節。操做成功時,返回文件指針相對於文
件頭的位置。參數 whence 可以使用下述值:
SEEK_SET:相對文件開頭
SEEK_CUR:相對文件讀寫指針的當前位置
SEEK_END:相對文件末尾
offset 可取負值,例以下述調用可將文件指針相對當前位置向前移動 5 個字節:
lseek(fd, -5, SEEK_CUR);
因爲 lseek 函數的返回值爲文件指針相對於文件頭的位置,所以下列調用的返回值就是文件
的長度:
lseek(fd, 0, SEEK_END);
5. 關閉當咱們操做完成之後,咱們要關閉文件了,只要調用 close 就能夠了,其中 fd 是咱們要關閉的文件描述符:int close(int fd);