gpt4 book ai didi

c - 退出函数后如何在c中保持文件句柄打开

转载 作者:太空宇宙 更新时间:2023-11-04 10:57:20 25 4
gpt4 key购买 nike

我正在尝试定期读取 proc 文件/proc/stat,但我想避免每次访问它时都必须打开和关闭 proc 文件。

我想在某种初始化函数中打开文件,然后在其他函数中继续使用它,稍后再关闭它。

似乎函数打开的文件句柄在函数退出时关闭我怎样才能让它保持打开状态?

如果我应该以其他方式做,请告诉我

我正在尝试做的示例:

#include <stdio.h>

int printer(FILE* fin)
{
/* I am getting fin as NULL */
if(!fin)
return 1;

char buf[16*1024];
rewind(fin);
size_t sz = fread(buf, 1, sizeof(buf), fin);
if (sz) {
buf[sz]=0;
printf(buf);
}

return 0;
}

int opener(FILE *fin)
{
fin = fopen("/proc/stat", "r");
if (!fin) {
perror("fopen");
return 1;
}

return 0;
}

int main() {
FILE *fin;
/*
* I know it works if I open the file handle in here instead of
* in another function but I want to avoid this
*/
if(opener(fin))
{
printf("ERROR1\n");
return 0;
}

while(1) {
if(printer(fin))
{
printf("ERROR2\n");
break;
}
sleep(1);
}
return 0;
}

最佳答案

c 中的函数是按值传递的。因此,当您将文件句柄传递给函数时,它会收到该句柄的副本并将在本地更新它。如果您希望这些更新传播给您的调用者,您需要传递文件句柄指针。所以你的开放看起来像:

int opener(FILE **fin)
{
*fin = fopen("/proc/stat", "r");
if (!(*fin)) {
perror("fopen");
return 1;
}

return 0;
}

你会这样调用它:

int main() {
FILE *fin;
/*
* I know it works if I open the file handle in here instead of
* in another function but I want to avoid this
*/
if(opener(&fin))
{
printf("ERROR1\n");
return 0;
}
/...
}

关于c - 退出函数后如何在c中保持文件句柄打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28355142/

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