fopen()是否保证为相同的路径值返回相同的值?

时间:2018-03-14 00:26:55

标签: c++ fopen

鉴于与path相同的FILE *fopen(const char *path, const char *mode)参数,fopen()是否保证返回相同的FILE*值?

,例如,以下代码的输出是否保证始终是相同值的两个指针?

#include <iostream>
#include <cstdio>

int foo( FILE* fp )
{
  std::cout << fp << std::endl;
  fclose(fp);
  fp = fopen( "foo.txt", "w+" );
  std::cout << fp << std::endl;
}

int main( int argc, char* arv[] )
{
  FILE* fp = fopen( "foo.txt", "a" );
  fwrite( "hello", 5, 1, fp );
  foo( fp );
  fwrite( "goodbye", 7, 1, fp );
  fclose(fp);
  return 0;
}

即。我想知道foo()对其本地fp的操纵是否使main()失效。但是这个编译的代码总是输出相同的FILE*值两次,暗示main()仍然有效,即使foo()正在处理本地副本而不是引用。

对于某些情况,这是我正在追逐工作的错误的简化:相当于上面的第二个fwrite()有时会返回0,而我正试图找出原因。看起来fwrite()的错误报告仅限于ferror()feof(),但上面编译的示例代码总是输出相同的指针值两次,这意味着代码没问题,并且我不清楚为什么会遇到ferror()feof()条件。

0 个答案:

没有答案