歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux新手學堂 Linux系統下文件的操作集錦

Linux新手學堂 Linux系統下文件的操作集錦

日期:2017/2/28 17:49:04   编辑:Linux教程
1.文件的創建和讀寫
我假設你已經知道了標准級的文件操作的各個函數(fopen,fread,fwrite等等)。當然如果你不清楚的話也不要著急。我們討論的系統級的文件操作實際上是為標准級文件操作服務的。
當我們需要打開一個文件進行讀寫操作的時候,我們可以使用系統調用函數open。使用完成以後我們調用另外一個close函數進行關閉操作。
#include
#include
#include
#include
int open(const char *pathname,int flags);
int open(const char *pathname,int flags,mode_t mode);
int close(int fd);
open函數有兩個形式。其中pathname是我們要打開的文件名(包含路徑名稱,缺省是認為在當前路徑下面)。flags可以去下面的一個值或者是幾個值的組合。
O_RDONLY:以只讀的方式打開文件。
O_WRONLY:以只寫的方式打開文件。
O_RDWR:以讀寫的方式打開文件。
O_APPEND:以追加的方式打開文件。
O_CREAT:創建一個文件。
O_EXEC:如果使用了O_CREAT而且文件已經存在,就會發生一個錯誤。
O_NOBLOCK:以非阻塞的方式打開一個文件。
O_TRUNC:如果文件已經存在,則刪除文件的內容。
前面三個標志只能使用任意的一個。如果使用了O_CREATE標志,那麼我們要使用open的第二種形式。還要指定mode標志,用來表示文件的訪問權限。mode可以是以下情況的組合。
-----------------------------------------------------------------
S_IRUSR 用戶可以讀 S_IWUSR 用戶可以寫
S_IXUSR 用戶可以執行 S_IRWXU 用戶可以讀寫執行
-----------------------------------------------------------------
S_IRGRP 組可以讀 S_IWGRP 組可以寫
S_IXGRP 組可以執行 S_IRWXG 組可以讀寫執行
-----------------------------------------------------------------
S_IROTH 其他人可以讀 S_IWOTH 其他人可以寫
S_IXOTH 其他人可以執行 S_IRWXO 其他人可以讀寫執行
-----------------------------------------------------------------
S_ISUID 設置用戶執行ID S_ISGID 設置組的執行ID
-----------------------------------------------------------------
我們也可以用數字來代表各個位的標志。Linux總共用5個數字來表示文件的各種權限。
00000。第一位表示設置用戶ID。第二位表示設置組ID,第三位表示用戶自己的權限位,第四位表示組的權限,最後一位表示其他人的權限。
每個數字可以取1(執行權限),2(寫權限),4(讀權限),0(什麼也沒有)或者是這幾個值的和。
比如我們要創建一個用戶讀寫執行,組沒有權限,其他人讀執行的文件。設置用戶ID位那麼我們可以使用的模式是--1(設置用戶ID)0(組沒有設置)7(1+2+4)0(沒有權限,使用缺省)5(1+4)即10705:
open("temp",O_CREAT,10705);
如果我們打開文件成功,open會返回一個文件描述符。我們以後對文件的所有操作就可以對這個文件描述符進行操作了。
當我們操作完成以後,我們要關閉文件了,只要調用close就可以了,其中fd是我們要關閉的文件描述符。
文件打開了以後,我們就要對文件進行讀寫了。我們可以調用函數read和write進行文件的讀寫。
#include
ssize_t read(int fd, void *buffer,size_t count);
ssize_t write(int fd, const void *buffer,size_t count);
fd是我們要進行讀寫操作的文件描述符,buffer是我們要寫入文件內容或讀出文件內容的內存地址。count是我們要讀寫的字節數。
對於普通的文件read從指定的文件(fd)中讀取count字節到buffer緩沖區中(記住我們必須提供一個足夠大的緩沖區),同時返回count。
如果read讀到了文件的結尾或者被一個信號所中斷,返回值會小於count。如果是由信號中斷引起返回,而且沒有返回數據,read會返回-1,且設置errno為EINTR。當程序讀到了文件結尾的時候,read會返回0。
write從buffer中寫count字節到文件fd中,成功時返回實際所寫的字節數。
Copyright © Linux教程網 All Rights Reserved