2 8 系統呼叫方式的檔案程式設計

2021-07-22 14:08:43 字數 3484 閱讀 2630

1.  基本理論

在linux中,所有開啟的檔案對應乙個數字,該數字由系統自動分配,稱為檔案描述符。

2.  檔案操作

2.1  開啟檔案

函式名:

open

函式原型:

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

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

函式功能:

開啟或建立乙個檔案。

所屬標頭檔案:

返回值:

成功:返回檔案描述符;失敗:返回-1

引數說明:

pathname:要開啟的檔名(含路徑)如:"/home/hello.c"

flags:開啟檔案標誌位

o_creat:當開啟檔案不存在,則建立該檔案    /*  使用了o_creat標誌時,必須聯通mode秒至一起使用  */

mode:建立檔案的訪問許可權,如:0755

範例**如下:

#include

#include

#include

#include

int main(int argc, char ** argv)

int fd = 0;

fd = open("/home/test.c",o_rdwr);

if ( fd < 0 )

printf("file opened fail!\n");

else

printf("fd is %d\n",fd);

return 0;

2.2  建立檔案

函式名:

creat

函式原型:

int creat(const char *pathname, mode_t mode);

函式功能:

建立乙個檔案,並以只寫的方式開啟該檔案。

所屬標頭檔案:

返回值:

成功:返回檔案描述符    失敗:返回-1

引數說明:

pathname:建立的檔名(含路徑)

mode:建立的檔案的讀寫許可權

範例**:

#include

#include

#include

int main(int argc, char ** argv)

int fd = 0;

fd = creat("/home/test2.c", 0621);

if ( fd < 0 )

printf("create file fail!\n);

else

printf("fd is %d\n",fd);

return 0;

2.3  關閉檔案

函式名:

close

函式原型:

int close (int fd);

函式功能:

關閉乙個開啟的檔案。

所屬標頭檔案:

返回值:

成功:返回0    失敗:返回-1

引數說明:

fd:待關閉的檔案描述符

範例**:

fd = open("......",......);

close(fd);

2.4  讀檔案

函式名:

read

函式原型:(man 2 read)(man 1:命令,2:系統呼叫,3,庫函式呼叫)

ssize_t read (int fd, void *buf, size_t count);

函式功能:

從乙個開啟的檔案中讀取資料。

所屬標頭檔案:

返回值:

成功:返回讀取的位元組數    失敗:返回-1

引數說明:

fd:要讀取資料的檔案的描述符

count:希望讀取的位元組數

buf:讀取的資料存到buf指向的空間

範例**:

#include

#include

#include

#include

#include

int main(int argc, char ** argv)

int fd = 0;

fd = open("/home/test1.c", o_rdwr | o_creat, 0755);

char buf [10];

read(fd, buf, 5);

buf[5] = '\0';

printf("buf is %s\n",buf);

close(fd);

return 0;

2.5  寫檔案

函式名:

write

函式原型:

ssize_t write(int fd, const void *buf, size_t count);

函式功能:

向乙個開啟的檔案寫入資料。

所屬標頭檔案:

返回值:

成功:返回寫入檔案的位元組數    失敗:返回-1

引數說明:

fd:要寫入資料的檔案的描述符

count:需要寫入的位元組數

buf:要寫入的資料的存放位置

範例**:

char *buf = "12345678";    /*  字串常量  */

write(fd, buf, 7);

2.6  定位檔案(檔案讀寫指標)

函式名:

lseek

函式原型:

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

函式功能:

重新定位檔案的讀寫位置。

所屬標頭檔案:

返回值:

成功:返回移動後的檔案指標距離檔案頭的位置    失敗:返回-1

引數說明:

fd:要重定位的檔案描述符

whence:檔案指標從什麼位置開始計數,取值如下:

seek_set:從檔案頭開始偏移offset個位元組(offset一般為正數)

seek_cur:從當前位置開始偏移offset個位元組(offset可以是正數,也可以是負數)

seek_end:從檔案尾開始偏移offset個位元組(offset一般為負數)

offset:指標偏移量

範例**:

lseek(fd, 0, seek_set);

2.7  複製檔案描述符

函式名:

dup函式原型:

int dup(int oldfd);

函式功能:

複製乙個檔案描述符

所屬標頭檔案:

返回值:

成功:返回新的檔案描述符    失敗:返回-1

引數說明:

oldfd:待複製的舊的檔案描述符

3.  綜合例項——檔案複製程式

3.1  步驟

開啟原始檔——>開啟或建立目標檔案——>讀取原始檔資料——>將資料寫入目標檔案中

3.2  **如下:

03 系統呼叫方式檔案程式設計

上篇文章提到,linux應用程式設計中需要的外部函式主要由函式庫 標c及其拓展 和系統呼叫 posix及其拓展 來提供。本篇就通過例項,講解通過 系統呼叫 glibc呼叫linux核心的函式 來實現檔案程式設計。命令格式 man number function這個是檢視函式的命令 number的取值...

系統呼叫的方式訪問檔案

1 建立檔案 int create const char filename mode t mode 建立檔案。filename為檔案路徑,mode為檔案許可權,如 s irusr 可讀 s irwxu 可讀 可寫 可執行。也可以用數字表示,如 0755。2 檔案描述 在linux中,所有開啟的檔案都...

系統呼叫方式訪問檔案

linux 系統中訪問檔案的方法 1.linux 系統呼叫 2.基於 c語言的訪問 系統呼叫 建立 int creat const char filename,mode t mode filename 要建立的檔名 包含路徑,預設為當前路徑 mode 建立模式 常見建立模式 s irusr 可讀 s...