c - fopen() 在 win32 上的性能

标签 c linux winapi

我正在尝试编写一些同时适用于 Linux 和 Win32 的代码。我发现它们之间最显着的区别(在我的代码中)是 fopen() 的性能。
以下代码在我的 Ubuntu 上需要 5 秒,而相同的代码在 Windows XP 上需要 100 多秒。这里要说明一下,ubuntu是虚拟机,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);

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

最佳答案

Clearly fopen() is the cause of this difference

不,它更有可能是文件系统刷新。
在一个系统上,当您写入或更可能调用 fclose() 时,它会阻塞,直到字节物理地存储在磁盘上(或至少直到磁盘显示它们在磁盘上)——在另一个系统上,文件系统会立即返回,即使苍蝇是还在写

关于c - fopen() 在 win32 上的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3295171/

相关文章:

c++ - 如何指定远程预处理器包含路径,如 192.0.2.17 ://usr/include

c# - Web 服务 asmx 不适用于单声道 4.2.3.4 Debian 8.2

linux - 有关 shell 命令的桌面通知已完成

c++ - GlobalAllocPtr() 总是为不同的进程返回相同的地址

c++ - 消息处理程序 INT_PTR 返回值的目的是什么?

c - 在C++中通过 'recv'和 'MSG_PEEK'获取套接字中可用的字节数

c - c中的堆分配

c - 适用于 char 字符串的别名规则

linux - 通过 Bash Shell 脚本从 url 列表中提取父域名

c++ - 创建注册表项 - 访问被拒绝