creat

C語言中建立文件的函數

creat是一個函數,可以用來創建一個文件並以只寫的方式打開。

UNIXC


creat(建立文件)
相關函數 read,write,fcntl,close,link,stat,umaskunlink,fopen
表頭文件
#include
#include
C語言:#include

定義函數


int creat(const char * pathname, mode_t mode);
函數功能:
創建一個文件並以只寫的方式打開。如果原來該文件存在,會將這個文件的長度截短為0。
函數說明
若函數執行成功則返回打開文件的描述符,出錯返回-1並設置errno。(關於errno詳見《UNIX環境高級編程》第一章第七節)
參數pathname指向欲建立的文件路徑字元串。creat()相當於使用下列的調用方式調用open()
open(const char * pathname ,(O_CREAT|O_WRONLY|O_TRUNC));
由於creat函數創建文件后是以只寫的方式打開,因此局限性比較大,所以一般都用open函數來代替creat函數創建一個文件,這樣創建后就能同時以讀寫的方式打開文件了。
錯誤代碼
關於參數mode請參考《UNIX環境高級編程》第四章。

歷史原因


提供creat函數是由於早期的UNIX系統版本中,open的第二個參數只能是0、1、2,沒有辦法打開一個尚未存在的文件,因此需要另一個系統調用creat以創建新文件。

返回值


creat()會返回新的文件描述詞,若有錯誤發生則會返回-1,並把錯誤代碼設給errno。
EEXIST 參數pathname所指的文件已存在。
EACCESS 參數pathname 所指定的文件不符合所要求測試的許可權
EROFS 欲打開寫入許可權的文件存在於只讀文件系統內
EFAULT 參數pathname 指針超出可存取的內存空間
EINVAL 參數mode 不正確。
ENAMETOOLONG 參數pathname太長。
ENOTDIR 參數pathname為一目錄
ENOMEM 核心內存不足
ELOOP 參數pathname有過多符號連接問題。
EMFILE 已達到進程可同時打開的文件數上限
ENFILE 已達到系統可同時打開的文件數上限
附加說明
creat()無法建立特別的裝置文件,如果需要請使用mknod()。