linux檔案程式設計

2021-08-23 14:32:17 字數 2795 閱讀 1642

文末有總結比較!!!

1.在linux中,為了更好地保護核心空間,將程式的執行空間分為核心空間和使用者空間(也就是常稱的核心態和使用者態),它們分別執行在不同的級別上,在邏輯上是相互隔離的。 因此,使用者程序在通常情況下不允許訪問核心資料,也無法使用核心函式,它們只能在使用者空間操作使用者資料,呼叫使用者空間的函式。

2.系統呼叫並不是直接與程式設計師進行互動的,它僅僅是乙個通過軟中斷機制向核心提交請求,以獲取核心服務的介面。在實際使用中程式設計師呼叫的通常是使用者程式設計介面—api 系統命令相對api更高了一層,它實際上乙個可執行程式,它的內部引用了使用者程式設計介面(api)來實現相應的功能。

3.系統呼叫——建立:int creat(const char *filename, mode_t mode ) filename :建立的檔名   (包含路徑,預設為當前路徑)     mode:建立模式 常建立模式:     s_irusr      可讀     s_iwusr     可寫     s_ixusr      可執行     s_ixrwu     可讀、可寫、可執行    除用以上巨集來選擇建立模式,也可以用數字來表示。

4.系統呼叫——開啟:int open(const char *pathname,    int flags,   mode_t mode);

pathname是要開啟或建立的檔案的名字     flags引數可用來說明此函式的多個選擇項     mode對於open函式而言,僅當建立新檔案時才使用第三個引數

o_creat 若此檔案不存在則建立它。使用此選擇項時,需同時說明第三個引數mode,用其說明該新檔案的訪問許可權。

以下三個常數中必須指定乙個,且僅允許指定乙個(這些常數定義在標頭檔案中)      o_rdonly   唯讀開啟      o_wronly   只寫開啟      o_rdwr     讀、寫開啟

5.系統呼叫——讀:int read(int fd, const void *buf, size_t   length) 功能:     從檔案描述符fd所指定的檔案中讀取length個位元組到buf所指向的緩衝區中,返回值為實際讀取的位元組數。

6.系統呼叫——寫:int write(int fd, const void * buf,  size_t length) 功能:     把length個位元組從buf指向的緩衝區中寫到檔案描述符fd所指向的檔案中,返回值為實際寫入的位元組數。

7.系統呼叫——定位:int lseek(int fd, offset_t offset,  int whence) 功能:    將檔案讀寫指標相對whence移動offset個位元組。操作成功時,返回檔案指標相對於檔案頭的位置

whence可使用下述值: seek_set:相對檔案開頭 seek_cur:相對檔案讀寫指標的當前位置 seek_end:相對檔案末尾 offset可取負值,表示向前移動。

8.庫函式——建立和開啟:file *fopen(const char *filename, const char *mode)    filename:開啟的檔名(包含路徑,預設為當前路徑)    mode:    開啟模式

介紹幾種開啟模式:

r,  rb :   唯讀方式開啟,檔案必須已存在 w,wb : 只寫方式開啟,如果檔案不存在則建立,如果文 件已存在清空重寫

a, ab: 只能在檔案末尾追加資料,如果檔案不存在則建立

r+,rb+,r+b:      讀寫方式開啟,檔案必須已存在

w+,w+b,wb+:  讀寫方式開啟,如果檔案不存在則建立,如果檔案已存在清空重寫

a+,a+b,ab+:      讀和追加方式開啟,如果檔案不存在則建立

總結幾種常用的函式:open函式:如ret = open(argv, o_rdonly),argv為命令列引數輸入的開啟檔名,o_rdonly為唯讀開啟方式,其中argv必須為已存在的檔案,如檔案不存在則使用

open(argv,o_rdonly | o_creat | o_excl, s_irwxu),由於檔案不存在,第三個引數必須加上,宣告檔案的許可權,此時許可權為可讀可寫可執行(可以man命令查詢需要宣告的許可權)。

!!!注意:此時open函式的返回值為整型,如果要接返回值需定義int型變數。如int ret;

fopen函式:如fp = fopen("hello.c", "a+"), "hello.c"為需要開啟的檔名,a+為文末追加開啟方式,如果檔案不存在則建立,(這種開啟方式似乎比open簡單許多)但是

!!!注意:fopen函式的返回值為指標,如果要接需使用檔案指標,如 file *fp;

read函式:如ret = read(fd_from, buf, sizeof(buf) - 1),從fd_from中讀取sizeof(buf)-1個位元組送入buf中

fread函式:如ret = fread(buf,1,sizeof(buf),fp),從fp中每次讀取1個位元組,讀取sizeof(buf)次,送入buf中

!!!注意:read與fread函式返回值均為讀取的位元組數。

write函式:如ret = write(fd_to, buf, stelen(buf) )從buf中寫strlen(buf) 個位元組送去fd_to中。

fwrite函式:如ret = fwrite(buf, 1,  strlen(buf), fp),從buf中每次讀取1個位元組,讀取strlen(buf)次,寫入fp中。

!!!注意:read與write函式第乙個引數均為目標檔案,第二個引數為快取區,第三個為位元組數

fread與fwrite函式第乙個引數為快取區,第二個引數為每次讀取的位元組數,第三個引數為次數,第四個為目標檔案。

fseek函式:如fseek(fp, 0, seek_end),第乙個目標檔案,第三個引數為指標移動的位置,此時為文末,第二個引數為此時指標再移動幾個位元組,此時0表示不移動,就指向文末。    

Linux檔案程式設計

在linux下可以通過相應的檔案i o函式來完成對檔案的操作,這些函式通常被稱為不帶緩衝的i o,因為這些函式對檔案的讀寫都是呼叫linux核心的系統呼叫來實現的。基本的函式包括 open read write lseek 設定檔案指標 close等 呼叫格式 include include inc...

Linux檔案程式設計

linux中檔案程式設計可以使用兩種方法 1.linux系統呼叫 2.c語言庫函式。系統呼叫是基於linux系統的,它不能跨系統使用。c語言庫函式在各個系統都能使用。a.下面先介紹基於系統呼叫的檔案程式設計 1.檔案的建立.int creat const char filename,mode t m...

Linux檔案程式設計

所謂系統呼叫是指作業系統提供給使用者的一組 特殊 介面,使用者程式可以通過這組 特殊 介面來獲得作業系統核心提供的的服務 由於在linux中,為了更好地保護核心空間,將程式的執行空間分為核心空間和使用者空間 也就是常稱的核心態和使用者態 它們分別執行在不同的級別上,在邏輯上是相互隔離的。因此,使用者...