_creat
, _wcreat
建立新檔案。 _creat
與 _wcreat
已被取代;請改用 _wsopen_s
_sopen_s
語法
int _creat(
const char *filename,
int pmode
);
int _wcreat(
const wchar_t *filename,
int pmode
);
參數
filename
新檔案的名稱。
pmode
權限設定。
傳回值
這些函式若成功,則傳回所建立檔案的檔案描述項。 否則,函式會傳回 -1 並設定 errno
如下表所示。
errno 值 |
描述 |
---|---|
EACCES |
filename 會指定現有的唯讀檔案,或指定目錄而不是檔案。 |
EMFILE |
沒有更多檔案描述項可用。 |
ENOENT |
找不到指定的檔案。 |
如果 filename
為NULL
,這些函式會叫用無效的參數處理程式,如參數驗證中所述。 如果允許繼續執行,這些函式會將 errno
設定為 EINVAL
,並傳回 -1。
如需這些傳回碼和其他傳回碼的詳細資訊,請參閱errno
、 _sys_errlist
_doserrno
和 _sys_nerr
。
備註
_creat
函式會建立新的檔案,或開啟並截斷現有的檔案。 _wcreat
是寬字元版本的 _creat
; filename
的 _wcreat
引數是寬字元字串。 否則,_wcreat
和 _creat
的行為即會相同。
根據預設,此函式的全域狀態會限定於應用程式。 若要變更它,請參閱 CRT中的全域狀態。
一般文字常式對應
Tchar.h 常式 | _UNICODE 和 _MBCS 未定義 |
_MBCS 已定義 |
_UNICODE 已定義 |
---|---|---|---|
_tcreat |
_creat |
_creat |
_wcreat |
如果 指定的 filename
檔案不存在,則會使用指定的許可權設定建立新的檔案,並開啟以供寫入。 如果檔案已存在且其權限設定允許寫入,_creat
會將檔案長度截斷至 0 並終結先前的內容,然後開啟檔案以供寫入。 權限設定 pmode
只會套用至新建立的檔案。 新檔案第一次關閉之後,會收到指定的許可權設定。 整數運算式 pmode
包含 SYS\Stat.h 中所定義的資訊清單常數 _S_IWRITE
及 (或) _S_IREAD
。 提供這兩個常數時,它們會與位或運算符聯結。 |
pmode
參數會設定為下列其中一個值。
值 | 定義 |
---|---|
_S_IWRITE |
允許寫入。 |
_S_IREAD |
允許讀取。 |
_S_IREAD | _S_IWRITE |
允許讀取和寫入。 |
如果未指定寫入許可權,則檔案是唯讀的。 所有檔案一律可讀取;無法授與唯寫許可權。 因此,模式 _S_IWRITE
和 _S_IREAD | _S_IWRITE
相同。 使用 _creat
開啟的檔案一律會以相容性模式開啟(請參閱 _sopen
使用 來 _SH_DENYNO
開啟 。
_creat
在設定許可權之前,將目前的檔案許可權遮罩套用至 pmode
(請參閱 _umask
)。 _creat
主要是為了與先前的程式庫相容所提供。 在 oflag
參數中使用 _O_CREAT
和 _O_TRUNC
呼叫 _open
相當於 _creat
,並且適用於新的程式碼。
需求
常式 | 必要的標頭 | 選擇性標頭 |
---|---|---|
_creat |
<io.h> | <sys/types.h>、<sys/stat.h、<errno.h>> |
_wcreat |
<io.h> 或 <wchar.h> | <sys/types.h>、<sys/stat.h、<errno.h>> |
如需相容性詳細資訊,請參閱相容性。
範例
// crt_creat.c
// compile with: /W3
// This program uses _creat to create
// the file (or truncate the existing file)
// named data and open it for writing.
#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
int fh;
fh = _creat( "data", _S_IREAD | _S_IWRITE ); // C4996
// Note: _creat is deprecated; use _sopen_s instead
if( fh == -1 )
perror( "Couldn't create data file" );
else
{
printf( "Created data file.\n" );
_close( fh );
}
}
Created data file.
另請參閱
低階 I/O
_chmod
, _wchmod
_chsize
_close
_dup
, _dup2
_open
, _wopen
_sopen
, _wsopen
_umask