gpt4 book ai didi

c - 如何检测 FILE 对象是否已关闭?

转载 作者:行者123 更新时间:2023-12-02 08:42:45 25 4
gpt4 key购买 nike

请看下面的代码块,我如何确保一个 FILE 对象在我调用 fclose 之前没有关闭?顺便说一句,两次调用 fclose 是否安全?

    FILE* f = fopen('test.txt')

//some code here, f may be closed by someone, but they may not set it to NULL
...


/// I want to make sure f is not closed before, how can I do it here?
if(...)
{
fclose(f)
}

最佳答案

不,您必须自己跟踪。这类似于判断指向已分配 block 的指针是否已被释放的问题。由于指针不再有效,因此无法进行此类测试。 FILE * 也是如此。关闭文件后,任何访问底层对象的尝试都会导致未定义的行为。

更新:

注意,引用 Linux 手册页:

The  behaviour  of fclose() is undefined if the stream parameter is anillegal pointer, or is a descriptor already passed to a previous invo‐cation of fclose().

请记住,未定义的行为并不意味着它会崩溃或它不会“工作”。这意味着不保证任何特定的行为并且操作是不安全的。在 fclose() 之后访问 FILE 结构是一个非常糟糕的主意。

关于c - 如何检测 FILE 对象是否已关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15126056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com