fopen()在win32上的表现

vrr*_*hod 6 c linux winapi

我正在尝试编写一些适用于Linux和Win32的代码.我发现它们之间最显着的区别(在我的代码中)是性能fopen().
以下代码在我的Ubuntu上需要5秒,而相同的代码在Windows XP上需要超过100秒.我想在这里做一个说明,ubuntu是VM,而XP是在真机上.

    time_t start = time(NULL);
    for(int i=0; i < 100000; ++i){
        FILE *fp = fopen("a.txt", "a");
        if (fp != NULL)
        {
            fprintf(fp, "Hello World");
            fclose(fp);
        }
    }
    time_t end = time(NULL);

    printf("\n It took %d seconds \n", end-start);
Run Code Online (Sandbox Code Playgroud)

显然fopen()是造成这种差异的原因.我想知道为什么会有这么大的差异?

Mar*_*ett 10

很明显,fopen()是造成这种差异的原因

不,它更可能是文件系统刷新.
在你编写的一个系统上,或者更有可能调用fclose()时,它会阻塞,直到字节在物理上位于磁盘上(或者至少直到磁盘显示它们为止) - 另一方面文件系统立即返回,即使苍蝇是还在写

  • @vrrathod:虽然 Martin 可能是对的,但省略 `fclose()` 仍然不是一个好的测试 - 一方面,您将耗尽打开文件限制(在两个操作系统上),然后 `if` 语句将不会被处决。 (2认同)