Python fopen,open,和popen的區別


1.  fopen    

  • 打開普通文件
  • 帶緩沖區撒點粉撒點粉阿桑地方
  • 緩沖文件系統是借助文件結構體指針來對文件進行管理,通過文件指針來對文件進行訪問,既可以讀寫字符、字符串、格式化數據,也可以讀寫二進制數據

函數原型:FILE * fopen(const char * path,const char * mode);

所需庫:< stdio.h>
返回值: 文件順利打開后,指向該流的 文件指針就會被返回。如果 文件打開失敗則返回NULL,並把 錯誤代碼存在errno 中。
參數說明:
參數path 字符串包含欲打開的 文件路徑及文件名,參數mode字符串則代表着流 形態
mode有下列幾種形態 字符串:
r 以 只讀方式打開 文件,該文件必須存在。
r+ 以可讀寫方式打開 文件,該文件必須存在。
rb+ 讀寫打開一個 二進制文件,允許讀寫 數據
rw+ 讀寫打開一個文本 文件,允許讀和寫。
w 打開只寫 文件,若文件存在則文件長度清為0,即該文件內容會消失。若 文件不存在則建立該文件。
w+ 打開可讀寫 文件,若文件存在則文件長度清為零,即該文件內容會消失。若 文件不存在則建立該文件。
a 以附加的 方式打開只寫 文件。若 文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。(EOF符保留)
a+ 以附加方式打開可讀寫的 文件。若 文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾后,即文件原先的內容會被保留。 (原來的EOF符不保留)
wb 只寫打開或新建一個 二進制文件;只允許寫數據。
wb+ 讀寫打開或建立一個 二進制文件,允許讀和寫。
ab+ 讀寫打開一個 二進制文件,允許讀或在文件末追加數據。
at+ 打開一個叫string的文件,a表示append,就是說寫入處理的時候是接着原來文件已有內容寫入,不是從頭寫入覆蓋掉,t表示打開文件的類型是文本文件,+號表示對文件既可以讀也可以寫。
上述的形態字符串都可以再加一個b字符,如rb、w+b或ab+等組合,加入b 字符用來告訴函數庫以二進制模式打開文件。如果不加b,表示默認加了t,即rt,wt,其中t表示以 文本模式打開文件。由f open()所建立的新 文件會具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)權限,此文件權限也會參考umask 值。
有些C 編譯系統可能不完全提供所有這些功能,有的C 版本不用"r+","w+","a+",而用"rw","wr","ar"等,讀者注意所用系統的規定。
 

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)通過邏輯位或邏輯構成。
  1. O_RDONLY 只讀模式
  2. O_WRONLY 只寫模式
  3. 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 將執行這個命令。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM