系統呼叫方式檔案程式設計
1.核心理論
檔案描述符:
在linux系統中,所有開啟的檔案對應一個數字,這個數字由系統來分配,我們稱之為:檔案描述符。
2.函式學習
開啟檔案
函式名: open
函式原型:int open(const char *pathname, int flags);
int open(const char* pathname, int flags, mode_t mode);
函式功能:開啟或建立一個檔案
所屬標頭檔案:<sys/types.h> <sys/stat.h> <fcntl.h>
返回值:成功返回檔案描述符,失敗返回-1
引數說明:
pathname:含路徑的檔名
flags:
許可權:O_RDONLY, O_WRONLY, O_RDWR
檔案開啟的標誌
O_APPEND:以追加方式開啟檔案
O_CREAT:當開啟的檔案不存在的時候,建立該檔案
mode:一定是在flags中使用了O_CREAT標誌,mode記錄待建立檔案的訪問許可權
建立檔案
函式名: creat
函式原型:int creat(const char*pathname, mode_t mode)
函式功能:建立一個檔案,並以只寫的方式開啟該檔案
所屬標頭檔案:<sys/types.h> <sys/stat.h> <fcntl.h>
返回值:成功返回檔案描述符,失敗返回-1
引數:pathname:建立的韓路徑檔名
mode:建立檔案的讀寫許可權
關閉檔案
函式名:close
函式原型:int close(int fd);
函式功能:關閉一個開啟的檔案
所屬標頭檔案:<unistd.h>
返回值:成功:0 失敗:-1
引數說明:fd 待關閉檔案的檔案描述符
讀檔案
函式名:read
函式原型: ssize_t read(int fd, void *buf, size_t count);
函式功能: 從一個開啟的檔案中讀取資料
所屬標頭檔案:<unistd.h>
返回值: 成功:返回讀取的位元組數 ,失敗:-1
引數說明:fd:檔案描述符, buf:用來儲存讀取的資料,count:希望讀取的位元組數
寫檔案
函式名:write
函式原型:ssize_t write(int fd, void * buf, size_t count);
函式功能:想一個開啟的檔案中寫入資料
標頭檔案:<unistd.h>
返回值:成功:寫入的位元組數, 失敗:-1
引數說明:fd:檔案描述符, buf:要寫入的資料存放位置,count:希望寫入的位元組數
檔案定位
函式名:lseek
函式原型:off_t lseek(int fd, off_t offset, int whence);
函式功能:重新定位檔案的讀寫位置
標頭檔案: <sys/types.h> <unistd.h>
返回值:成功:返回移動後文件指標距離檔案頭的位置, 失敗:-1
引數:fd:檔案描述符, offset:偏移量
whence:三種取值 SEEK_SET:從檔案頭+偏移量, SEEK_CUR:從當前位置+偏移量, SEEK_END:從檔案尾+偏移量
複製檔案描述符
函式名:dup
函式原型:int dup(int oldfd);
函式功能:複製一個檔案描述符
標頭檔案:<unistd.h>
返回值:成功:新檔案描述符, 失敗:-1
引數說明:oldfd 待複製的老的檔案描述符
3.綜合例項
-
/***********************************************
-
* 程式名:filecp.c
-
* 功能:檔案複製
-
**********************************************/
-
#include <sys/types.h>
-
#include <sys/stat.h>
-
#include <fcntl.h>
-
#include <unistd.h>
-
int main(int argc, char *argv[])
-
{
-
int fd_s;
-
int fd_t;
-
int count = 0;
-
char buff[512];
-
/*開啟原始檔*/
-
fd_s = open(argv[1],O_RDONLY);
-
/*開啟目標檔案*/
-
fd_t = open(argv[2],O_RDWR|O_CREAT,0666);
-
/*讀取原始檔資料*/
-
while((count = read(fd_s,buff,512)) > 0)
-
{
-
/*將讀取出的資料寫入目標檔案*/
-
write(fd_t,buff,count);
-
}
-
/*關閉檔案*/
-
close(fd_s);
-
close(fd_t);
-
return 0;
-
}