Linux新手學(xué)堂 Linux系統(tǒng)下文件的操作集錦
2024-08-28 00:05:19
供稿:網(wǎng)友
1.文件的創(chuàng)建和讀寫(xiě)
我假設(shè)你已經(jīng)知道了標(biāo)準(zhǔn)級(jí)的文件操作的各個(gè)函數(shù)(fopen,fread,fwrite等等)。當(dāng)然如果你不清楚的話也不要著急。我們討論的系統(tǒng)級(jí)的文件操作實(shí)際上是為標(biāo)準(zhǔn)級(jí)文件操作服務(wù)的。
當(dāng)我們需要打開(kāi)一個(gè)文件進(jìn)行讀寫(xiě)操作的時(shí)候,我們可以使用系統(tǒng)調(diào)用函數(shù)open。使用完成以后我們調(diào)用另外一個(gè)close函數(shù)進(jìn)行關(guān)閉操作。
#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函數(shù)有兩個(gè)形式。其中pathname是我們要打開(kāi)的文件名(包含路徑名稱,缺省是認(rèn)為在當(dāng)前路徑下面)。flags可以去下面的一個(gè)值或者是幾個(gè)值的組合。
O_RDONLY:以只讀的方式打開(kāi)文件。
O_WRONLY:以只寫(xiě)的方式打開(kāi)文件。
O_RDWR:以讀寫(xiě)的方式打開(kāi)文件。
O_APPEND:以追加的方式打開(kāi)文件。
O_CREAT:創(chuàng)建一個(gè)文件。
O_EXEC:如果使用了O_CREAT而且文件已經(jīng)存在,就會(huì)發(fā)生一個(gè)錯(cuò)誤。
O_NOBLOCK:以非阻塞的方式打開(kāi)一個(gè)文件。
O_TRUNC:如果文件已經(jīng)存在,則刪除文件的內(nèi)容。
前面三個(gè)標(biāo)志只能使用任意的一個(gè)。如果使用了O_CREATE標(biāo)志,那么我們要使用open的第二種形式。還要指定mode標(biāo)志,用來(lái)表示文件的訪問(wèn)權(quán)限。mode可以是以下情況的組合。
-----------------------------------------------------------------
S_IRUSR 用戶可以讀 S_IWUSR 用戶可以寫(xiě)
S_IXUSR 用戶可以執(zhí)行 S_IRWXU 用戶可以讀寫(xiě)執(zhí)行
-----------------------------------------------------------------
S_IRGRP 組可以讀 S_IWGRP 組可以寫(xiě)
S_IXGRP 組可以執(zhí)行 S_IRWXG 組可以讀寫(xiě)執(zhí)行
-----------------------------------------------------------------
S_IROTH 其他人可以讀 S_IWOTH 其他人可以寫(xiě)
S_IXOTH 其他人可以執(zhí)行 S_IRWXO 其他人可以讀寫(xiě)執(zhí)行
-----------------------------------------------------------------
S_ISUID 設(shè)置用戶執(zhí)行ID S_ISGID 設(shè)置組的執(zhí)行ID
-----------------------------------------------------------------
我們也可以用數(shù)字來(lái)代表各個(gè)位的標(biāo)志。Linux總共用5個(gè)數(shù)字來(lái)表示文件的各種權(quán)限。
00000。第一位表示設(shè)置用戶ID。第二位表示設(shè)置組ID,第三位表示用戶自己的權(quán)限位,第四位表示組的權(quán)限,最后一位表示其他人的權(quán)限。
每個(gè)數(shù)字可以取1(執(zhí)行權(quán)限),2(寫(xiě)權(quán)限),4(讀權(quán)限),0(什么也沒(méi)有)或者是這幾個(gè)值的和。
比如我們要?jiǎng)?chuàng)建一個(gè)用戶讀寫(xiě)執(zhí)行,組沒(méi)有權(quán)限,其他人讀執(zhí)行的文件。設(shè)置用戶ID位那么我們可以使用的模式是--1(設(shè)置用戶ID)0(組沒(méi)有設(shè)置)7(1+2+4)0(沒(méi)有權(quán)限,使用缺省)5(1+4)即10705:
open("temp",O_CREAT,10705);
如果我們打開(kāi)文件成功,open會(huì)返回一個(gè)文件描述符。我們以后對(duì)文件的所有操作就可以對(duì)這個(gè)文件描述符進(jìn)行操作了。