【问题标题】:Does the file closes in c when the function returns?函数返回时文件是否在 c 中关闭?
【发布时间】:2021-04-11 20:53:13
【问题描述】:

我正在检查函数中是否存在文件。

int main(int argc, char* argv[])
{
  foo(argc, argv);
  // File exists
  // Do something
}

void foo(int argc, char** argv)
{
  int f = open(argv[1], O_RDONLY);
  if(f == -1)
  {
    exit(1);
  }
}

当函数调用返回时文件是否超出范围或关闭,或者在我编写 c 代码以通过系统调用将一个文件的内容复制到另一个文件时它会保持打开状态并影响性能。

【问题讨论】:

    标签: c file-handling


    【解决方案1】:

    文件没有关闭,因为没有关闭它的代码。该文件不会超出范围,因为只有变量或对象可以超出范围。但是,当f 超出范围时,用于访问文件的描述符(或句柄)超出范围,无法访问或关闭它。

    【讨论】:

    • 关于“文件不会超出范围,因为只有变量或对象可以超出范围”:对象不能“超出范围”。只有标识符有范围。对象有生命周期。
    • 那么我将不得不做close(f);。对吗?
    • @EricPostpischil 我不认为如此严格地解析术语是有用的。如果有人在他们的代码中有struct foo s;,我认为说s 在范围内是有用的,s 是一个生命周期一直持续到超出范围的对象。说s 是一个标识对象的标识符并没有错,我只是不要求在语音或交流中达到那种程度的间接性,因为这么挑剔是没有用的。
    • @Ahmn21 要释放与打开文件相关的任何资源(例如描述符),您需要将描述符的值传递给close。这将导致实现释放这些资源。
    • @DavidSchwartz:错误的术语会教出错误的想法。标识符和对象是不同的东西,它们可以使用的地方和时间不同。教错的东西会导致问题,导致必须忘却的信息,而必须学习正确的信息。所以它不会节省时间或提供好处,也没有用处。
    猜你喜欢
    • 2021-11-09
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    相关资源
    最近更新 更多