Linux的檔案操作

2021-10-03 07:43:58 字數 3093 閱讀 3357

linux的檔案作業系統呼叫(在windows程式設計領域,作業系統提供的介面稱為 api)涉及建立(create)、開啟(open)、讀寫(read/write)和關閉(close)檔案。

1.1 建立

int creat(const char *filename, mode_t mode)
引數mode指定新建檔案的訪問屬性, 它和umask一起決定了檔案的最終許可權(mode&umask),其中,umask代表了檔案在建立時需要去掉的一些訪問許可權。umask可以通過系統呼叫umask()來改變:

int umask(int newmask);
該呼叫講umask設定為newmask, 然後返回舊的umask, 它只會影響讀、寫和執行許可權。

1.2 開啟

int open(const char *pathname, int flags);

int open(const char *pathname, int flags, mode_t mode);

open()函式有2個形式, pathname是要開啟的檔名(需要包含路徑名稱,預設是未當前路徑)。flags是檔案開啟標誌,可以是乙個值或者幾個值的組合

標誌含義

o_rdonly

唯讀方式

o_wronly

只寫方式

o_rdwr

讀寫方式

追加的方式

o_creat

建立乙個檔案

o_exec

如果使用了o_creat而且檔案已經存在,就會發生乙個錯誤

o_noblock

非阻塞的方式

o_trunc

如果檔案已經存在,則刪除檔案的內容

o_rdonly、o_wronly、o_rdwr三個標誌只能使用乙個。

如果使用了o_creat標誌, 那麼使用的函式是int open(const char *pathname, int flags, mode_t mode);這個使用還要指定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個數字來表示檔案的各種許可權:第一位表示設定使用者id;第二位表示設定組id;第三位表示使用者自己的許可權位;第四位表示組的許可權;最後一位表示其他人的許可權。每個數字可以取1(執行許可權)、2(寫許可權)、4(讀許可權)、0(無)或者是 這些值的和。例如,要建立乙個使用者 可讀、可寫、可執行,但是組沒有許可權,其他人可以讀、可以執行的檔案、並設定使用者id位,那麼應該使用的模式是1(設定使用者id)、0(不設定id)、7(1+2+4,讀、寫、執行)、0(沒有 許可權)、5(1+4,讀、執行)即10 705:

open(「file」, o_creat, 10705);

上述語句等價於:

open("file", o_creat, s_irwxu | s_iroth | s_ixoth | s_isuid);

如果檔案開啟成功, open函式會返回乙個檔案描述符, 以後對該檔案的所有操作就可以通過對這個檔案描述符進行操作就可以實現。

1.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);
1.4 定位

對於隨機檔案, 可以隨機指定位置進行讀寫, 使用如下函式進行定位:

int lseek(int fd, offset_t offset, int whence);
lseek() 把檔案讀寫指標相對 whence 移動 offset 個位元組。 操作成功時, 返回檔案指標相對於檔案頭的位置。 引數 whence 可以使用下屬值:

seek_set:相對檔案開頭

seek_cur:相對檔案讀寫指標的當前位置

seek_end:相對檔案末尾

offset 可取負值, 例如下面呼叫可以把檔案指標相對當前位置 向前移動5個位元組:

lseek(fd, -5, seek_cur);
由於 lseek 函式的返回值為檔案指標相對於檔案頭的位置, 因此下面呼叫的返回值就是檔案的長度:

lseek(fd, 0, seek_end);

1. 5 關閉

當我們操作完成以後, 要關閉檔案,此時,只要呼叫close就可以了, 其中 fd 是要關閉的檔案描述符:

int close(int fd);

linux的檔案操作

建立檔案 刪除檔案 複製檔案 編輯檔案 檔案的壓縮與解壓縮 ls 檢視當前目錄下的檔案 a 顯示所有檔案及目錄 ls內定將檔名或目錄名稱開頭為 的視為隱藏檔,不會列出 l 除檔名稱外,亦將檔案型態 許可權 擁有者 檔案大小等資訊詳細列出 r 將檔案以相反次序顯示 原定依英文本母次序 t 將檔案依建立...

linux 檔案操作

1 cat 開啟檔案 cat name.txt 開啟檔案name.txt cat 1.txt 2.txt 開啟2個檔案 cat n name.txt 開啟檔案後顯示行號 2 vi 輸出,刪除,查詢,替換,塊操作 等文字操作 vi 的三種基本工作模式 命令列模式,文字輸入模式,末行模式 命令列模式 不...

Linux 檔案操作

1,查詢檔案 find name 名稱 ls find atime 10 記著有乙個點號 兩邊都有空格,代表當前目錄,如果希望顯示系統的所有大於10天的檔案 可以將 換成 代表根目錄 find mtime n print n天前那天改過的檔案 find mtime n print n天以前改過的檔案...