【问题标题】:Stream descriptor loss in fopen + stream _dupfopen + 流 _dup 中的流描述符丢失
【发布时间】:2011-10-11 10:33:16
【问题描述】:

我有以下代码示例(在 Windows 中):

int fd = _dup(fileno(stdout));
freopen("tmp","w",stdout);

printf("1111");
close(stdout);

char buf[100];

FILE *fp;   
fp = fopen("tmp","r");//in this line fd turns to be 0
if(NULL == fp) return -1;
if(fgets(buf,100 , fp) != NULL );
else return -1
fclose(fp);

我需要 fd 的值以备将来使用。如何从文件中读取而不丢失 fd 值?

【问题讨论】:

  • 指示的行不会影响 fd 的值。您的代码中的其他地方一定有错误。
  • @ Klas Lindbäck - 不。这正是代码。我调试它并看到 fd 值是 3 直到指示行
  • 不可能。 fgets(buf,100 , fp) != NULL ); 甚至无法编译。我在Linux下试了一下,改正语法错误后,程序结束时fd的值为3。
  • Klas Lindbäck - 抱歉,这是一个错字。在问题中写道,问题与窗户有关
  • 我看到它在 Windows 中,但这不重要。也许调试器有缺陷?你试过打印 fd 的值吗?

标签: c winapi stream fopen dup


【解决方案1】:

我敢打赌,要么 buf 被声明小于 100,要么 fgets 调用实际上是一个大于 100 的数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 2014-08-26
    • 2012-03-27
    • 2017-03-25
    相关资源
    最近更新 更多