gpt4 book ai didi

c - 我真的需要注释的 fclose() 命令吗?

转载 作者:可可西里 更新时间:2023-11-01 11:23:53 25 4
gpt4 key购买 nike

以下程序摘自 Johnson M. Hart 的Windows 系统编程(第四版):

#include<stdio.h>
#include<errno.h>

#define BUF_SIZE 256

int main(int argc, char *argv[])
{
FILE *inFile, *outFile;
size_t bytesIn, bytesOut;
char rec[BUF_SIZE];

if (argc != 3) {
printf("Syntax : scp source destination.\n");
return 1;
}

inFile = fopen(argv[1], "rb");
if (inFile == NULL) {
perror(argv[1]);
return 2;
}

outFile = fopen(argv[2], "wb");
if (outFile == NULL) {
perror(argv[2]);
//fclose(inFile);
return 3;
}

while ((bytesIn = fread(rec, 1, BUF_SIZE, inFile)) > 0) {
bytesOut = fwrite(rec, 1, bytesIn, outFile);
if (bytesIn != bytesOut) {
perror("Fatal write error.");
//fclose(inFile); fclose(outFile);
return 4;
}
}

fclose(inFile);
fclose(outFile);
return 0;
}

关闭或不关闭注释行中的文件都一样。
然而,在阅读了之前的帖子后,我不确定什么是最佳实践。
让操作系统完成它的工作,还是在我认为应该的时候关闭它们?
我这样说是因为我在 Windows GUI 应用程序中看到过这样的情况,当我关闭句柄而不是操作系统时,我在屏幕上造成了一个小故障,我实际上是在延迟操作系统,因为我像许多 C++ 书籍一样进行清理说。
我在这里没有使用任何窗口……它是一个 CRT 实现,但仍然……

最佳答案

现代操作系统将释放未释放的终止进程的资源,例如 malloc 分配的内存、文件描述符等。因此理论上您不需要关闭描述符,如果无论如何你都要结束这个程序。

不管你是对的,我认为这是不好的做法,我建议程序员总是释放资源并关闭文件描述符,即使是像你这样的小而琐碎的程序。稍后当你在一个更大的项目中工作时,你必须管理资源,你可能会忘记在真正需要时进行清理,因为你已经从琐碎的例子中学会了不要关心它。这就是为什么我认为即使对于像您这样的微不足道的例子,这样做也是一种很好的做法。

I am saying this because i have seen situations in windows GUI apps that when i close the handles instead of the OS i am causing a small glitch on the screen and I am essentially delaying the OS because I do the cleaning like many C++ books say.

我不知道,也许您关闭了错误的文件描述符(或您不应该关闭的文件描述符)或关闭的时间不正确。没有代码很难说这是不是真的。

关于c - 我真的需要注释的 fclose() 命令吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49101556/

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