代码之家  ›  专栏  ›  技术社区  ›  chaitanyavarma

C中无fclose的fopen

  •  6
  • chaitanyavarma  · 技术社区  · 14 年前

    如果我使用 fopen 一些 不来电次数 fclose 在上面?

    是否会出现缓冲区溢出问题?

    5 回复  |  直到 14 年前
        1
  •  15
  •   Community paulsm4    7 年前

    fopen fclose 最终你的未来 fopen公司 会开始失败。程序可用的文件描述符数量有限。

    See this related SO question

        2
  •  6
  •   NT_    14 年前

    您浪费了底层文件句柄。请及时关闭您打开的任何文件,以避免资源泄漏。

        3
  •  3
  •   Ignacio Vazquez-Abrams    14 年前

        4
  •  3
  •   Nikolai Fetissov    14 年前

    除了像其他人回答的那样浪费文件描述符之外,您还可以 浪费内存 因为每个文件流都管理由 libc

        5
  •  1
  •   bstpierre Edgar Aviles    14 年前

    正如其他人提到的,您不希望泄漏文件描述符。但是它 可以将单个文件打开多次。文件描述符是独立的,不会相互干扰(假设您只是读取而不是写入文件)。

    #include <stdio.h>
    
    int main()
    {
        FILE* f1 = fopen("/tmp/foo.txt", "rb");
        FILE* f2 = fopen("/tmp/foo.txt", "rb");
        FILE* f3 = fopen("/tmp/foo.txt", "rb");
        FILE* f4 = fopen("/tmp/foo.txt", "rb");
    
        char buf1[32] = { 0, };
        char buf2[32] = { 0, };
        char buf3[32] = { 0, };
        char buf4[32] = { 0, };
    
        fread(buf1, 1, sizeof(buf1) - 1, f1);
        fread(buf2, 1, sizeof(buf2) - 1, f2);
        fread(buf3, 1, sizeof(buf3) - 1, f3);
        fread(buf4, 1, sizeof(buf4) - 1, f4);
    
        printf("buf1 = '%s'\n", buf1);
        printf("buf2 = '%s'\n", buf2);
        printf("buf3 = '%s'\n", buf3);
        printf("buf4 = '%s'\n", buf4);
    
        fclose(f1);
        fclose(f2);
        fclose(f3);
        fclose(f4);
    
        return 0;
    }
    

    输出如下:

    $ ./fopen 
    buf1 = '0123456789ABCDEFGHIJ0123456789a'
    buf2 = '0123456789ABCDEFGHIJ0123456789a'
    buf3 = '0123456789ABCDEFGHIJ0123456789a'
    buf4 = '0123456789ABCDEFGHIJ0123456789a'