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...