【问题标题】:How do stdin, stdout, stderr get closed?标准输入、标准输出、标准错误如何关闭?
【发布时间】:2011-10-19 09:54:49
【问题描述】:

退出程序时,这些FILE*对象是如何关闭和释放的?

【问题讨论】:

    标签: c


    【解决方案1】:

    它们被自动链接到您的程序的 C 运行时代码关闭 - 调用 main() 函数的代码在 main() 返回后也会调用 exit()。

    【讨论】:

      【解决方案2】:

      来自 C99 §7.20.4.3/3:

      接下来,所有带有未写入缓冲数据的打开流都被刷新,所有 打开的流被关闭,所有由 tmpfile 函数创建的文件 被删除。

      POSIX(与 C99 对齐)更好地拼写:

      exit() 函数随后将用未写入的方式刷新所有打开的流 缓冲数据并关闭所有打开的流。

      【讨论】:

      • 这是否意味着它也会关闭用户可能打开的任何其他流?它是怎么知道他们的?
      • @Paul 它知道是因为stdio 自己记账。 fopen 不仅仅是返回FILE *
      猜你喜欢
      • 2018-08-29
      • 1970-01-01
      • 1970-01-01
      • 2013-11-06
      • 2014-07-22
      • 1970-01-01
      • 2013-05-11
      • 2013-01-11
      • 2011-11-30
      相关资源
      最近更新 更多