**:
1.open函式的使用
呼叫open函式可以開啟或建立乙個檔案
#include
#include
#include
int open(const
char *pathname, int flags);
int open(const
char *pathname, int flags, mode_t mode);
pathname引數是要開啟或建立的檔名,和fopen一樣,pathname既可以是相對路徑也可以是絕對路徑.
flags引數用來說明此函式的多個選項。用下列乙個或多個常量進行」或」運算構成flags引數。(常量在fcntl.h標頭檔案中定義)
以下三個常數中必須指定乙個,且僅允許指定乙個。
o_rdonly 唯讀開啟
o_wronly 只寫開啟
o_rdwr 可讀可寫開啟
stdin_fileno 0
stdout_fileno 1
stderr_fileno 2
注意open函式與c標準i/o庫的fopen函式有些細微的區別:
以可寫的方式fopen乙個檔案時,如果檔案不存在會自動建立,而open乙個檔案時必須明確指定o_creat才會建立檔案,否則檔案不存在就出錯返回。
以w或w+方式fopen乙個檔案時,如果檔案已存在就截斷為0位元組,而open乙個檔案時必須明確指定o_trunc才會截斷檔案,否則直接在原來的資料上改寫。
第三個引數mode指定檔案許可權,可以用八進位制數表示,比如0644表示-rw-r-r–,也可以用s_irusr、s_iwusr等巨集定義按位或起來表示,詳見open(2)的manpage。要注意的是,檔案許可權由open的mode引數和當前程序的umask掩碼共同決定。
示例:
#include
#include
#include
#include
#include
int main(void)
printf("fd = %d\n", fd);
return
0;}
執行結果:
cat@lenovo
:~/blog/
0719$ ./open
fd = 3
cat@lenovo
:~/blog/
0719$ ls -lh hello
-rwxrwxr-x 1 cat cat 0
7月 2000:
12 hello
cat@lenovo
:~/blog/
0719$ umask
0002
2.close函式的使用
close函式關閉乙個已開啟的檔案:
#include
int close(int fd);
返回值:成功返回0,出錯返回-1並設定errno
引數fd是要關閉的檔案描述符。需要說明的是,當乙個程序終止時,核心對該程序所有尚未關閉的檔案描述符呼叫close關閉,所以即使使用者程式不呼叫close,在終止時核心也會自動關閉它開啟的所有檔案。但是對於乙個長年累月執行的程式(比如網路伺服器),開啟的檔案描述符一定要記得關閉,否則隨著開啟的檔案越來越多,會占用大量檔案描述符和系統資源。
由open返回的檔案描述符一定是該程序尚未使用的最小描述符。由於程式啟動時自動開啟檔案描述符0、1、2,因此第一次呼叫open開啟檔案通常會返回描述符3,再呼叫open就會返回4。可以利用這一點在標準輸入、標準輸出或標準錯誤輸出上開啟乙個新檔案,實現重定向的功能。例如,首先呼叫close關閉檔案描述符1,然後呼叫open開啟乙個常規檔案,則一定會返回檔案描述符1,這時候標準輸出就不再是終端,而是乙個常規檔案了,再呼叫printf就不會列印到螢幕上,而是寫到這個檔案中了。
示例:
#include
#include
#include
#include
#include
#include
int main(void)
printf("hello world\n");
return
0;}
執行結果:
cat@lenovo
:~/blog/
0719$ ./close
cat@lenovo
:~/blog/
0719$ cat cat
hello world
open close函式的使用
include include include int open const char pathname,int flags int open const char pathname,int flags,mode t mode o wronly 只寫開啟 o rdwr 可讀可寫開啟 o creat ...
學習文件接觸到的知識 openclose
辛辛苦苦整理,腦子卻不是很清楚,都怪晚上貓不睡覺,讓我也沒睡好 openset 和 closeset def get sample return sample with get sample as sample print sample sample in enter sample foo in e...
函式的使用
函式的定義 我們有乙個很簡單的函式echoname function echoname 他的結構如下 array type function name echoname property array child array array type echo value array type strin...