如果我不在C

时间:2017-03-17 02:33:04

标签: c fclose

我们假设我们有一个c程序如下:

int fun(char *path) {
    FILE *f = fopen(path, "r");
    int result;
    // Do something here without closing the file
    return result;
}

int main(int argc, char *argv[])
{
    int i = fun(argv[1]);
    printf("%d\n", i);
    return 0;
}

我知道不关闭文件不是一个好习惯。但我想知道什么时候文件将由操作系统关闭。 fun返回或main何时返回?程序被杀的时候怎么样?

2 个答案:

答案 0 :(得分:2)

是的,操作系统将回收程序完成执行后打开的文件描述符。但是,如果您的程序是守护程序,那么它将继续打开文件,导致操作系统达到FS_OPEN_MAX的限制。您可以使用命令ulimit -a以及其他限制来查看此内容。

这是特定于Unix或GNU / Linux for Windows我不知道。

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 63179
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 63179
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

答案 1 :(得分:2)

这是main。文件句柄分配给进程,而不是任何给定的函数。想想如果将f声明为全局变量会发生什么。任何进程终止都将关闭文件并释放与该进程关联的任何其他系统资源。