1. fopen
- 打開普通文件
- 帶緩沖區撒點粉撒點粉阿桑地方
- 緩沖文件系統是借助文件結構體指針來對文件進行管理,通過文件指針來對文件進行訪問,既可以讀寫字符、字符串、格式化數據,也可以讀寫二進制數據
函數原型:FILE * fopen(const char * path,const char * mode);
所需庫:<
stdio.h>
參數說明:
mode有下列幾種形態
字符串:
r+ 以可讀寫方式打開
文件,該文件必須存在。
rw+ 讀寫打開一個文本
文件,允許讀和寫。
wb 只寫打開或新建一個
二進制文件;只允許寫數據。
wb+ 讀寫打開或建立一個
二進制文件,允許讀和寫。
ab+ 讀寫打開一個
二進制文件,允許讀或在文件末追加數據。
at+ 打開一個叫string的文件,a表示append,就是說寫入處理的時候是接着原來文件已有內容寫入,不是從頭寫入覆蓋掉,t表示打開文件的類型是文本文件,+號表示對文件既可以讀也可以寫。
2. open
- 打開設備文件
- 不帶緩沖區
- 非緩沖文件系統依賴於操作系統,通過操作系統的功能對文件進行讀寫,是系統級的輸入輸出,它不設文件結構體指針,只能讀寫二進制文件,但效率高、速度 快
函數原型:int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
所需庫:<fcntl.h>
返回值:成功則返回文件描述符,否則返回 -1;
參數說明:
對於
open函數來說,第三個參數僅當創建新文件時(即 使用了O_CREAT 時)才使用,用於指定文件的訪問權限位(access permission bits)。pathname 是待
打開/創建文件的POSIX路徑名(如/home/user/a.cpp);flags 用於指定文件的打開/創建模式,這個參數可由以下
常量(定義於
fcntl.h)通過邏輯位或邏輯構成。
O_RDONLY 只讀模式O_WRONLY 只寫模式O_RDWR 讀寫模式
打開/創建文件時,至少得使用上述三個常量中的一個。以下常量是選用的:
O_APPEND 每次寫操作都寫入文件的末尾O_CREAT 如果指定文件不存在,則創建這個文件O_EXCL 如果要創建的文件已存在,則返回 -1,並且修改 errno 的值O_TRUNC 如果文件存在,並且以只寫/讀寫方式打開,則清空文件全部內容(即將其長度截短為0)O_NOCTTY 如果路徑名指向終端設備,不要把這個設備用作控制終端。O_NONBLOCK 如果路徑名指向 FIFO/塊文件/字符文件,則把文件的打開和后繼 I/O
設置為非阻塞模式
- (nonblocking mode)
以下三個常量同樣是選用的,它們用於同步輸入輸出
- O_DSYNC 等待物理 I/O 結束后再 write。在不影響讀取新寫入的數據的前提下,不等待文件屬性更新。
O_RSYNCread等待所有寫入同一區域的寫操作完成后再進行O_SYNC 等待物理 I/O 結束后再write,包括更新文件屬性的 I/O
3.popen
- 打開管道
函數原型:FILE * popen ( const char * command , const char * type );
所需庫:<
stdio.h>
返回值:如果調用 fork() 或 pipe() 失敗,或者不能分配內存將返回NULL,否則返回標准 I/O 流。
參數說明:
type 參數只能是讀或者寫中的一種,得到的返回值(標准 I/O 流)也具有和 type 相應的只讀或只寫類型。如果 type 是 "r" 則文件指針連接到 command 的標准輸出;如果 type 是 "w" 則文件指針連接到 command 的標准輸入。
command 參數是一個指向以 NULL 結束的 shell 命令字符串的
指針。這行命令將被傳到 bin/sh 並使用-c 標志,shell 將執行這個命令。
