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 );
...
真的吗?
答案 0 :(得分:1)
当您继续阅读问题中引用的帮助时,您会找到答案:
`freopen_s` is typically used to redirect the pre-opened files stdin, stdout,
and stderr to files specified by the user.
因此,不打算使用自定义的FILE指针freopen
。相反,它会影响可能广泛使用的stdout等。
关于你的问题“这真的吗?”:是的。
修改:关于其他问题: 我的问题是:pFile在那里做什么?
函数freopen_s
的pFile参数是指向FILE*
的指针。该函数可以分配一个新的FILE对象,并返回带有pFile
的新指针。可能存在不分配新对象但更改由*pFile
间接传递的FILE结构的运行时库。但这是强烈依赖于实现的。
此外,fclose
部分之后的非原子操作可能会失败。在这种情况下,运行时可能会将使用pFile
传递的指针更改为NULL。