fopen, fopen_s

fopen, fopen_s

C

编译器支持

语言

头文件

类型支持

程序工具

变参函数支持

错误处理

动态内存管理

字符串库

算法

数值

日期和时间工具

输入/输出支持

本地化支持

并发支持 (C11)

技术规范

符号索引

[编辑] 文件输入/输出

类型和对象

stdinstdoutstderr

FILE

fpos_t

函数

文件访问

fopenfopen_s(C11)

freopenfreopen_s(C11)

fwide(C95)

setbuf

setvbuf

fclose

fflush

非格式化输入/输出

fgetc

fgets

fputc

fputs

getchar

getsgets_s(直至 C11)(C11)

putchar

puts

ungetc

fgetwcgetwc(C95)(C95)

fgetws(C95)

fputwcputwc(C95)(C95)

fputws(C95)

getwchar(C95)

putwchar(C95)

ungetwc(C95)

格式化输入

scanffscanfsscanfscanf_sfscanf_ssscanf_s(C11)(C11)(C11)

wscanffwscanfswscanfwscanf_sfwscanf_sswscanf_s(C95)(C95)(C95)(C11)(C11)(C11)

vscanfvfscanfvsscanfvscanf_svfscanf_svsscanf_s(C99)(C99)(C99)(C11)(C11)(C11)

vwscanfvfwscanfvswscanfvwscanf_svfwscanf_svswscanf_s(C99)(C99)(C99)(C11)(C11)(C11)

直接输入/输出

fread

fwrite

格式化输出

printffprintfsprintfsnprintfprintf_sfprintf_ssprintf_ssnprintf_s(C99)(C11)(C11)(C11)(C11)

wprintffwprintfswprintfwprintf_sfwprintf_sswprintf_ssnwprintf_s(C95)(C95)(C95)(C11)(C11)(C11)(C11)

vprintfvfprintfvsprintfvsnprintfvprintf_svfprintf_svsprintf_svsnprintf_s(C99)(C11)(C11)(C11)(C11)

vwprintfvfwprintfvswprintfvwprintf_svfwprintf_svswprintf_svsnwprintf_s(C95)(C95)(C95)(C11)(C11)(C11)(C11)

文件定位

ftell

fgetpos

fseek

fsetpos

rewind

错误处理

clearerr

feof

ferror

perror

文件操作

remove

tmpfiletmpfile_s(C11)

rename

tmpnamtmpnam_s(C11)

[编辑]

定义于头文件

(1)

FILE *fopen( const char *filename, const char *mode );

(直到 C99)

FILE *fopen( const char *restrict filename, const char *restrict mode );

(C99 起)

errno_t fopen_s( FILE *restrict *restrict streamptr,

const char *restrict filename,

const char *restrict mode );

(2)

(C11 起)

1) 打开由 filename 指定的文件并返回指向与该文件关联的文件流的指针。mode 用于确定文件访问模式。

2) 与 (1) 相同,不同之处在于文件流的指针被写入 streamptr,并且在运行时检测到以下错误并调用当前安装的约束处理程序函数 streamptr 是空指针 filename 是空指针 mode 是空指针

与所有进行边界检查的函数一样,只有当实现定义了 __STDC_LIB_EXT1__ 并且用户在包含 之前将 __STDC_WANT_LIB_EXT1__ 定义为整数常量 1 时,才能保证 fopen_s 可用。

目录

1 参数

2 文件访问标志

3 返回值

4 注意

5 示例

6 引用

7 参阅

[编辑] 参数

filename

-

要将文件流关联到的文件名

mode

-

确定文件访问模式的以 null 结尾的字符串

streamptr

-

指向函数存储结果的指针(一个输出参数)

[编辑] 文件访问标志

文件访问模式字符串

含义

解释

文件已存在时的操作

文件不存在时的操作

"r"

读取

打开文件进行读取

从头开始读取

打开失败

"w"

写入

创建文件进行写入

销毁内容

创建新文件

"a"

追加

追加到文件

写入到末尾

创建新文件

"r+"

读取扩展

打开文件进行读/写

从头开始读取

错误

"w+"

写入扩展

创建文件进行读/写

销毁内容

创建新文件

"a+"

追加扩展

打开文件进行读/写

写入到末尾

创建新文件

可以可选地指定文件访问模式标志 "b" 以二进制模式打开文件。此标志在 POSIX 系统上没有效果,但在 Windows 上它会禁用对 '\n' 和 '\x1A' 的特殊处理。在追加文件访问模式下,无论文件位置指示器的当前位置如何,数据都将写入文件末尾。

如果模式不是上面列出的字符串之一,则行为是未定义的。某些实现定义了额外的受支持模式(例如 Windows)。

在更新模式('+')下,可以执行输入和输出,但输出后不能直接跟随输入,除非中间调用了 fflush、fseek、fsetpos 或 rewind;输入后也不能直接跟随输出,除非中间调用了 fseek、fsetpos 或 rewind,除非输入操作遇到了文件结尾。在更新模式下,即使指定文本模式,实现也允许使用二进制模式。

文件访问模式标志 "x" 可以选择附加到 "w" 或 "w+" 说明符。此标志强制函数在文件存在时失败,而不是覆盖它。(C11)

使用 fopen_s 或 freopen_s 时,任何使用 "w" 或 "a" 创建的文件的文件访问权限会阻止其他用户访问它。文件访问模式标志 "u" 可以选择性地添加到任何以 "w" 或 "a" 开头的说明符前,以启用默认的 fopen 权限。(C11)

[编辑] 返回值

1) 成功时,返回指向新文件流的指针。除非 filename 指的是交互式设备,否则流是完全缓冲的。出错时,返回空指针。POSIX 要求在这种情况下设置 errno。

2) 成功时,返回零,并将指向新文件流的指针写入 *streamptr。出错时,返回非零错误代码,并将空指针写入 *streamptr(除非 streamptr 本身是空指针)。

[编辑] 注意

filename 的格式是实现定义的,不一定指的是文件(例如,它可能是控制台或通过文件系统 API 可访问的其他设备)。在支持它们的平台上,filename 可以包含绝对或相对文件系统路径。

[编辑] 示例

运行此代码

#include

#include

int main(void)

{

const char* fname = "/tmp/unique_name.txt"; // or tmpnam(NULL);

int is_ok = EXIT_FAILURE;

FILE* fp = fopen(fname, "w+");

if (!fp)

{

perror("File opening failed");

return is_ok;

}

fputs("Hello, world!\n", fp);

rewind(fp);

int c; // note: int, not char, required to handle EOF

while ((c = fgetc(fp)) != EOF) // standard C I/O file reading loop

putchar(c);

if (ferror(fp))

puts("I/O error when reading");

else if (feof(fp))

{

puts("End of file is reached successfully");

is_ok = EXIT_SUCCESS;

}

fclose(fp);

remove(fname);

return is_ok;

}

可能的输出

Hello, world!

End of file is reached successfully

[编辑] 参考

C17 标准 (ISO/IEC 9899:2018)

7.21.5.3 fopen 函数 (p: 223-224)

K.3.5.2.1 fopen_s 函数 (p: 428-429)

C11 标准 (ISO/IEC 9899:2011)

7.21.5.3 fopen 函数 (p: 305-306)

K.3.5.2.1 fopen_s 函数 (p: 588-590)

C99 标准 (ISO/IEC 9899:1999)

7.19.5.3 fopen 函数 (p: 271-272)

C89/C90 标准 (ISO/IEC 9899:1990)

4.9.5.3 fopen 函数

[编辑] 另请参阅

fclose

关闭文件 (function) [编辑]

fflush

将输出流与实际文件同步 (function) [编辑]

freopenfreopen_s(C11)

用不同的名称打开一个现有流 (function) [编辑]

C++ 文档 for fopen

相关文章

联通机顶盒密码是多少
365bet体育足球比分

联通机顶盒密码是多少

🕒 07-16 👁️ 745
儿童智商多少算正常范围
365bet体育足球比分

儿童智商多少算正常范围

🕒 10-19 👁️ 4311
海豚能在淡水中生活嗎?
beat365最新版体育

海豚能在淡水中生活嗎?

🕒 09-26 👁️ 3582