1

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 );
...

真的是这样吗?

4

1 回答 1

1

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

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

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

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

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

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

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

于 2014-02-08T16:57:26.133 回答