檔案描述符:在linux系統中,開啟的檔案會對應乙個數字(非負整數),這個由系統分配的數字我們
稱之為檔案描述符(file descriptor),具體可以看下這裡的:linux中的檔案描述符與開啟檔案之間的關係 。學習目標:
1、學習系統呼叫的函式:open,close,read,write,creat,lseek,dup;一、學習函式2、程式設計:複製檔案的程式。
1、open:開啟或者建立乙個檔案或裝置(open and possibly create a file or device)
1)函式原型int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
2)所屬標頭檔案
#include
#include
#include
3)返回值
成功: 返回新的檔案描述符
失敗: -1
4)引數說明
*pathname: 包含路徑的檔名(可以是絕對路徑也可以是相對路徑)
*flags: 檔案開啟的標誌
使用o_rdonly(唯讀), o_wronly(只寫) 或 o_rdwr(可讀可寫) 與 o_creat(建立新檔案)
*o_creat: 若檔案不存在則新建乙個檔案
若使用了o_creat則需要指定mode(檔案許可權), 但是mode通常會被umask(掩碼)修改, 所以
一般建立的檔案許可權為(mode & ~umask),
2、close: 關閉乙個檔案描述符
1)函式原型int close(int fd);
2)所屬標頭檔案#include
3)返回值成功: 0
失敗: -1
4)引數說明fd: 帶關閉的檔案描述符
3、read: 在檔案描述符上執行讀操作(read from a file descriptor)
1)函式原型ssize_t read(int fd, void *buf, size_t count);
2)所屬標頭檔案#include
3)返回值成功: 返回成功讀取的位元組數
失敗: -1
4)引數說明fd: 待讀取的檔案描述符
buf: 讀取資訊的緩衝陣列
count: 讀取位元組數
4、write: 在檔案描述符上執行寫操作(write to a file descriptor)1)函式原型
ssize_t write(int fd, const void *buf, size_t count);
2)所屬標頭檔案#include
3)返回值成功: 返回成功寫入的位元組數
失敗: -1
4)引數說明5、creat: 建立乙個檔案, 並以只寫的方式開啟該檔案fd: 待寫入資料的檔案描述符
buf: 待寫入的資料緩衝陣列
count: 待寫入資料的位元組數
1)函式原型int creat(const char *pathanme, mode_t mode);
2)所屬標頭檔案#include
#include#include
3)返回值成功: 返回新建的檔案描述符
失敗: -1
4)引數說明6、lseek: 重新定義檔案讀寫的偏移量pathname: 建立的檔名(包含路徑)
mode: 設定檔案許可權
1)函式原型off_t lseek(int fd, off_t offset, int whence);\
2)所屬標頭檔案#include
#include
3)返回值成功: 返回產生的偏移量(距離檔案頭的位置)
失敗: -1
4)引數說明7、dup: 複製乙個檔案描述符(duplicate a file descriptor)fd: 要重置的檔案描述符
offset: 要便宜的量
whence: 偏移開始的位置
* seek_set: 從檔案頭
* seek_cur: 從當前位置
* seek_end: 從檔案尾
1)函式原型
int dup(int old fd);
int dup(int old, int newfd);
2)所屬標頭檔案#include
3)返回值成功: 返回新的檔案描述符
失敗: -1
4)引數說明二、最佳實踐oldfd: 原始檔描述符
newfd: 目標檔案描述符
* 編寫copy程式:
#include #include #include #include #include #define buf_size 512
void main(int argc, char* argv)
/* 4. 關閉目標檔案 */
close(fd_dest);
/* 5. 關閉原始檔 */
# 這裡採用命令列引數
argc: 引數個數
argv[0]: 程式名
argv[1]: 第乙個引數, 以此類推第二個第三個,,,,,
/* 2. 開啟目標檔案 */
fd_dest = open(argv[2], o_wronly|o_creat, s_irwxu|s_irwxg|s_irwxo);
這裡可以看出, 我們給出的是所有使用者可讀可寫可執行. 然而由於umask的影響結果卻不如所願
這裡許可權正好為(mode & ~umask).
Linux檔案程式設計之 系統呼叫 open
1 相關函式說明 函式原型 int open const char pathname,int flags int open constchar pathname,int flags,mode t mode 如果使用了o creat標誌,則要使用這個函式,這時需要指定mode來表示檔案的訪問許可權 相...
Linux檔案程式設計之 系統呼叫 close
1 相關函式說明 相關函式 open,fcntl,shutdown,unlink,fclose 表頭檔案 include 定義函式 int close intfd 引數說明 引數fd為先前由open 或creat 所返回的檔案描述詞。當使用完檔案後若已不再需要則可使用close 關閉該檔案,而clo...
Linux檔案程式設計之 系統呼叫 read
1 相關函式說明 函式原型 int read int fd,void buf size t count 相關函式 readdir,write,fcntl,close,lseek,readlink,fread 表頭檔案 include 函式說明 從檔案描述符fd所指定的檔案中,讀取count個位元組,...