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