河北滄州建設官方網(wǎng)站專業(yè)的網(wǎng)絡推廣
目錄
- 系統(tǒng)調用接口
- 文件描述符
- 一、open
- 二、write
- 三、read
- 四、lseek
- 五、close
?之前介紹了IO庫函數(shù),本文主要介紹系統(tǒng)提供的IO接口,與IO庫函數(shù)搭配食用效果更佳。
系統(tǒng)調用接口
?常使用的IO系統(tǒng)調用接口如下:
接口 | 作用 |
---|---|
open | 打開指定的文件 |
write | 向指定的文件寫入數(shù)據(jù) |
read | 從指定的文件讀取數(shù)據(jù) |
lseek | 跳轉指定文件的讀寫位置 |
close | 關閉指定文件 |
文件描述符
?系統(tǒng)調用IO接口的操作離不開文件描述符,那么什么是文件描述符?
??在IO庫函數(shù)中,操作一個文件使用的是文件流指針,可以說文件流指針就是文件的操作句柄。操作句柄就是用來操作東西的手柄,就像操控電視的遙控器一樣。
??IO庫函數(shù)其實就是對IO接口的封裝,將IO接口中的文件描述符封裝后就變成了文件流指針,因此文件描述符就是IO接口中文件的操作句柄。
一、open
?int open(const char *pathname, int flags, mode_t mode)
?作用:用指定方式打開指定文件
- const char *pathname:要打開的文件名(帶路徑)
- int flags:文件的打開方式
- mode_t mode:文件不存在時創(chuàng)建文件所使用的權限(這里要注意文件掩碼的問題)
?返回值:成功返回一個非負整數(shù)(就是文件描述符),失敗返回-1。
?flags選項(前三種必須選擇一個):
- O_RDONLY:只讀
- O_WRONLY:只寫
- O_RDWR:可讀可寫
- O_CREAT:文件不存在就創(chuàng)建
- O_APPEND:寫入數(shù)據(jù)時以追加方式寫
- O_TRUNC:打開文件時清空
二、write
?ssize_t write(int fd, const void *buf, size_t count)
?作用:向指定文件寫入指定大小的數(shù)據(jù)。
- int fd:要向哪個文件寫入數(shù)據(jù),就傳入哪個文件的文件描述符
- const void *buf:要向文件寫入的數(shù)據(jù)的首地址
- size_t count:要寫入的數(shù)據(jù)的字節(jié)長度
?返回值:成功返回實際寫入文件的數(shù)據(jù)長度,失敗返回-1
三、read
?ssize_t read(int fd, void *buf, size_t count)
?作用:從指定文件讀取指定大小的數(shù)據(jù)。
- int fd:要從哪個文件讀出數(shù)據(jù),就傳入哪個文件的文件描述符
- void *buf:存儲讀取到的數(shù)據(jù)的空間首地址
- size_t count:要讀取的數(shù)據(jù)長度,以字節(jié)為單位
?返回值:成功返回實際讀取到的數(shù)據(jù)的長度,出錯返回-1
四、lseek
?off_t lseek(int fd, off_t offset, int whence)
?作用:跳轉讀寫位置
- int fd:文件的操作句柄
- off_t offset:偏移量
- int whence:從哪里開始偏移
?返回值:成功返回當前跳轉后的位置相對于起始位置的偏移量,出錯返回-1
?whence選項:
- SEEK_SET:起始位置
- SEEK_CUR:當前讀寫位置
- SEEK_END:末尾位置
五、close
?int close(int fd)
?作用:關閉文件
- int fd:要關閉的文件的文件描述符