- 一、文件IO --->fd(文件描述符)
- 打開文件open
- 讀、寫文件read/write
- 關閉文件close
- #include <sys/types.h>
- #include <sys/stat.h>
- #include<fcntl.h>
- 文件描述符:操作系統中已打開文件的標識符。小的、非負的整形數據
- 范圍:0-1023(共1024個)
- 分配原則:最小未被使用原則
- 系統默認已經打開的三個文件占用了0(標準輸入設備),1(標準輸出設備),2標準出錯設備)這三個文件描述符
- 已打開文件需及時關閉,否則文件描述符使用完時會造成文件描述符泄漏
- flags:打開方式
- O_RDONLY :只讀方式
- O_WRONLY:只寫方式
- O_RDWR:可讀可寫
- O_CREAT:創建文件
- O_TRUNC:清空文件
- O_APPEND:追加寫
- open :int open(const char *pathname, int flags); int open(const char *pathname,int flags,mode_t mode);
- 功能:打開文件并獲得一個文件描述符
- 參數:pathname:要打開的文件的文件名;flags:打開方式;mode:文件讀寫執行操作權限(IWXTWXIWX、111111111 --->0777、IW-1W-I--、110110100 --->0664)
- 返回值:成功:文件描述符;失敗:-1
- write :ssize_t write(int fd, const void *buf, size_t count);
- 功能:向文件中寫入數據
- 參數:fd:文件描述符;buf:要寫入的數據的首地址;count:要寫入的字節數
- 返回值:;成功:實際寫入的字節數;失敗:-1
- read :ssize_t read(int fd, void *buf, size_t count);
- 功能:從文件中讀取數據
- 參數:fd:文件描述符;buf:存儲數據的空間首地址;count:希望讀取的字節數
- 返回值:成功:實際讀到的字節數;失敗:-1;讀到文件末尾:0
- 文件定位函數lseek :off_t lseek(int fd, off_t offset, int whence);
- 功能:文件讀寫位置定位
- 參數:fd:文件描述符;offset:偏移量(字節);whence:要偏移的相對位置
- SEEK_SET:文件開頭位置
- SEEK_CUR:文件當前讀寫位置
- SEEK_END:文件末尾
- 返回值:成功:返回當前讀寫位置到文件開頭的偏移量;失敗:-1
- 二、標準IO與文件IO的區別
- 標準IO
- 屬于C庫函數,移植性強
- 標準IO是系統調用的一次封裝,增加了緩沖區,目的是提高數據讀寫的效率
- 主要用在對普通文件的操作
- 文件IO
- 屬于系統調用,只能用于Linux操作系統,移植性弱
- 文件IO無緩沖區
- 主要應用在對硬件的操作,也可以操作普通文件
- 緩沖區
- 行緩沖 1k(1024字節)--->人機交互界面、終端
- 行緩沖區被刷新的方法
- 程序結束,自動刷新緩沖區
- 遇到“\n”刷新
- fflush(強制刷新)
- 緩沖區滿時自動刷新
- 行緩沖區被刷新的方法
- 全緩沖 4k(4096字節)--->文件緩沖區
- 全緩沖區被刷新的方法
- 程序結束,自動刷新緩沖區
- fflush(強制刷新)
- 文件關閉刷新
- 緩沖區滿時自動刷新
- 全緩沖區被刷新的方法
- 無緩沖 0k --->出錯信息對應的設備
- stderr(標準出錯設備)--->無緩沖
- 行緩沖 1k(1024字節)--->人機交互界面、終端
- 標準IO