创建新文件。 _creat 和 _wcreat 已被弃用;请转而使用 _sopen_s、_wsopen_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、_doserrno、_sys_errlist 和 _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 清单常量中的一个或两个。 当给定这两个常数时,将使用按位 OR 运算符 (|) 连接它们。 pmode 参数可设置为下列值之一。
| 值 | 定义 |
|---|---|
_S_IWRITE |
允许写入。 |
_S_IREAD |
允许读取。 |
_S_IREAD | _S_IWRITE |
允许读取和写入。 |
如果未授予写入权限,则该文件为只读。 所有文件始终具有可读性;不能提供只写权限。 模式 _S_IWRITE 和 _S_IREAD | _S_IWRITE 是等效的。 使用 _creat 打开的文件始终在 _SH_DENYNO 中的兼容模式下打开(请参阅 _sopen)。
在设置这些权限之前,_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.