系統呼叫之檔案訪問

2021-06-28 22:18:00 字數 4428 閱讀 7945

1:

write

系統呼叫

系統呼叫write

的作用是,把緩衝區

buf的前

nbytes

位元組寫入到與檔案描述符

fildes

關聯的檔案中,同時它會返回實際寫入的位元組數。如果返回

0,就表示為寫出任何資料;如果是

-1,就表示在

write

系統呼叫中出現了錯誤,對應的錯誤碼儲存在全域性變數

errno中。 

下面是write

系統呼叫的原型:

#include 

size_t write(int fildes, const void *buf, size_t nbytes);

(注意:當開始執行程式的時候,它一般會有三個已經開啟的檔案描述符,其中

0代表標準輸入,

1代表標準輸出,

2代表標準錯誤輸出。)

例項:

#include 

int main(void)

測試結果:

lishuo@lishuo-rev-1-0:~/test$ make

gcc -o test test.c

lishuo@lishuo-rev-1-0:~/test$ ./test

hello world !

2:read

系統呼叫

系統呼叫read

的作用是從檔案描述符

fildes

相關聯的檔案裡讀入

nbytes

個位元組的資料,把它們放到緩衝區

buf中,並返回實際讀入的位元組書。如果返回

0,表示未讀入任何資料;如果返回

-1,表示

read

呼叫出現問題。 

下面是read

函式呼叫原型:

#include 

size_t read(int fildes, void *buf, size_t nbytes);  

例項:  

#include 

int main(void)

測試結果: 

lishuo@lishuo-rev-1-0:~/test$ make

gcc -o test test.c

lishuo@lishuo-rev-1-0:~/test$ ./test

hello world !

hello world !

3:open

系統呼叫

open系統呼叫建立了一條到檔案或裝置的訪問路徑,如果操作成功,它將返回乙個檔案描述符,

read

和write

等系統呼叫就是使用該檔案描述符對開啟的檔案進行操作。

open

呼叫成功時返回乙個新的檔案描述符,失敗時返回

-1.並設定

errno

指明失敗的原因。 

函式原型如下:

#include 

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

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

pathname為檔名,如

「file.c」;

oflag表示

open

以什麼方式開啟該檔案,其中

o_rdonly(唯讀)

,o_wronly(只寫)

,o_rdwr

(讀寫)為三種最常用的方式。其中如果設定了

o_creat,open

就會按照

mode

給出的訪問模式建立檔案。

mode為訪問許可權的初始值,這些標誌在

sys/stat.h

中定義。例如

open("myfile", o_creat, s_irusr | s_iwusr | s_ixuur),

它的作用是建立乙個

myfile

新檔案,只有檔案所有者具有讀寫和執行的許可權。 

例項: 

#include 

#include 

#include 

int main(void)

測試結果: 

1:編譯

lishuo@lishuo-rev-1-0:~/test$ make

gcc -o test test.c

2:建立檔案

file.in

和file.out

lishuo@lishuo-rev-1-0:~/test$ man rm > file.in

lishuo@lishuo-rev-1-0:~/test$ > file.out

lishuo@lishuo-rev-1-0:~/test$ls -l file.in file.out

-rw-rw-r-- 1 lishuo lishuo 3949  6月  

5 19:10 file.in

-rw-rw-r-- 1 lishuo lishuo    0  6月  

5 19:11 file.out

3:執行

lishuo@lishuo-rev-1-0:~/test$ ./test

lishuo@lishuo-rev-1-0:~/test$ ls -l file.in file.out

-rw-rw-r-- 1 lishuo lishuo 3949  6月  

5 19:10 file.in

-rw-rw-r-- 1 lishuo lishuo 3949  6月  

5 19:11 file.out

lishuo@lishuo-rev-1-0:~/test$ diff file.in file.out

4:close

系統呼叫

close系統呼叫終止乙個檔案描述符

fildes

與其對應檔案之間的關聯,檔案描述符被釋放並能夠重新使用。當返回

0的時候,說明

close

呼叫成功,

-1表示呼叫出錯。 

函式原型:

#include 

int close(int fildes); 

5:ioctl系統呼叫  

ioctl提供了乙個用於控制裝置及其描述符行為和配置底層服務的介面。 

函式原型:

#include 

int ioctl(int fildes, int cmd, ...);

6:lseek系統呼叫

lseek系統呼叫對檔案描述符

fildes

的讀寫指標進行設定,讀寫指標可以設定為檔案中的某個絕對位置,也可以為相對位置。它返回從檔案頭到檔案指標被設定出的位元組偏移值,失敗返回-1。

函式原型:

#include 

#include 

off_t lseek(int fildes, off_t offset, int whence);

fildes:檔案描述符

offset:指定偏移位置

whence:可取下列值:

seek_set(

絕對位置

),seek_cur(

相對與當前位置的乙個相對位置

),seek_end(

相對與檔案尾的乙個相對位置。)

off_t:定義在

sys/stat.h中。 

7:fstat

系統呼叫

fstat系統呼叫返回與開啟檔案描述符相關的檔案愛你的狀態資訊,該資訊將會寫到

buf結構中,

buf的位址以引數形式傳遞給

fstat。

stat系統呼叫通過檔名返回狀態資訊;如果是乙個符號鏈結的時候,

lstat

返回的是該符號鏈結本身的資訊,而

stat

返回該鏈結指向檔案的資訊。 

函式原型:

#include 

#include 

#include 

int fstat(int fildes, struct stat *buf);

int stat(const char* path, struct stat *buf);

int lstat(const char* path, struct stat *buf); 

8:dup

和dup2

系統呼叫

dup系統呼叫複製檔案描述符

fildes

,返回乙個新的描述符;

dup2系統呼叫通過明確指定目標描述符把乙個檔案描述符複製成另外乙個。 

函式原型:

#include 

int dup(int fildes);

int dup2(int fildes, int fildes2);

linux系統呼叫之檔案系統操作

access 確定檔案的可訪問性 chdir 改變當前工作目錄 fchdir 參見chdir chmod 改變檔案方式 fchmod 參見chmod chown 改變檔案的屬主或使用者組 fchown 參見chown lchown 參見chown chroot 改變根目錄 stat 取檔案狀態資訊 ...

檔案操作的系統呼叫之open,read

include include include include include include define size 1024 open include include include int open const char pathname,int flags,mode tmode pathna...

系統呼叫之lseek

注意 這個指標是和檔案描述符相掛鉤的,並不與這個檔案掛鉤,所以可以有多個程序來對這個檔案進行操作,不會影響各自。當從檔案讀取資料時,核心從指標指向的位置開始,讀取指定的位元組數,然後移動指標,指向下乙個未被讀取過的位元組,寫檔案的過程也是類似。off t oldpos lseek int fd,of...