gpt4 book ai didi

c - freopen 或 freopen_s,它们到底在做什么?

转载 作者:行者123 更新时间:2023-11-30 15:38:51 41 4
gpt4 key购买 nike

errno_t freopen_s ( FILE** pFile, const char *path, const char *mode, FILE *stream );

这里,freopen_s 将 FILE 指针 stream 与它所指向的任何内容解除关联,然后将其与位于 path 的文件关联起来。 mode 定义了使用此特定指针stream 可以执行的操作的限制。

据我所知,所有这些都与以下情况没有什么不同:

...
fclose( stream );
fopen_s( &stream, path, mode );
...

我的问题是:pFile 在那里做什么? freopen也有它,作为返回值。从我看到的所有示例中,pFile 在调用之后也指向位于 path 的同一个文件。所以:

...
fclose( stream );
fopen_s( &stream, path, mode );
fopen_s( pFile, path, mode );
...

真的是这样吗?

最佳答案

当您继续阅读问题中引用的帮助时,您会找到答案:

`freopen_s` is typically used to redirect the pre-opened files stdin, stdout, 
and stderr to files specified by the user.

因此,您无意使用自定义的 FILE 指针来指向 freopen。相反,它会影响可能广泛使用的标准输出等。

关于你的问题“真的是这样吗?”:是的。

编辑:关于另一个问题:我的问题是:pFile 在那里做什么?

函数 freopen_s 的 pFile 参数是一个指向 FILE* 的指针。该函数可以分配一个新的 FILE 对象,并使用 pFile 返回新指针。可能存在不分配新对象但更改由 *pFile 间接传递的 FILE 结构的运行时库。但这强烈依赖于实现。

此外,fclose 部分之后的非原子操作可能会失败。在这种情况下,运行时可能会将 pFile 传递的指针更改为 NULL。

关于c - freopen 或 freopen_s,它们到底在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21648342/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com