c - 在 Debian Linux 中快速创建一个非常大的文件

标签 c linux debian

我目前正在进行一个项目,该项目涉及将一个非常大的文件(大约 6GB)从一台 Linux 服务器传输到另一台 Linux 服务器。服务器在 Debian Squeeze 上运行。 为了实现我的主要目标,我首先将文件的名称和大小发送到目标机器,然后创建一个空文件来存储我逐渐从源机器接收到的数据 block 。 我的问题是在我的服务器上创建一个 6GB 的文件花费的时间太长。为了更清楚地说明,我使用以下 C 例程来创建新文件:

void create_file(char* f_name, long long f_size) {
    char* bs, *of, *s_f_size, *count;
    if((pid = fork()) < 0) {
            perror("fork() failed.");
            return;
    }
    if(pid == 0) {
        //Call execl
        of = (char*) malloc(sizeof(char)*(strlen("of=") + strlen(f_name) + 1));
        s_f_size = (char*) malloc(sizeof(char)*32);
        sprintf(s_f_size, "%lld", file_size);
        count = (char*) malloc(sizeof(char)*(strlen("count=") + strlen(s_f_size) + 1));
        strcpy(of, "of=");
        strcat(of, f_name);
        strcpy(count, "count=");
        strcat(count, s_f_size);
        ret = execl("/bin/dd", "dd", "if=/dev/zero", of, "bs=1", count, (char*) 0);
        if(ret < 0) {
            perror("execl() failed");
            free(s_f_size);
            free(of);
            free(count);
            return;
        }else {
            free(s_f_size);
            free(of);
            free(count);
            return;
        }
    }else {
        status = 0;
        wpid = wait(&status);

    }
}

我使用 Linux dd 命令是因为我认为这是创建一个 6GB 空文件的最快方法。但是,大约需要 15 分钟才能完成。有没有办法更快地创建空文件?我做错了什么?

感谢您的宝贵时间。

真诚的, 尼克

最佳答案

除了 Joachim Pileborg 的建议之外,您还可以使用 posix_fallocate()为您的文件预分配空间。

关于c - 在 Debian Linux 中快速创建一个非常大的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16771660/

相关文章:

android - 如何同步内核时间和logcat时间?

android - 哪种方法最适合C程序在Android中运行

c - 如何将十六进制数字打印到文件中?

c - 从 C 程序执行 "echo $PATH"?

c - C 中的独立应用程序,一个好主意?

ansible - 创建系统接口(interface)名称列表及其 MAC 地址

keyboard-shortcuts - 从 Midnight Commander 调用 Vim 时,Ctrl-O 让我卡在 Midnight Commander 面板 View 中

Apache 不提供 "javascript"目录中的文件。为什么?

c++ - C 或 C++ 或 WinApi 中是否有任何函数可以创建目录,包括指定路径中所有不存在的目录?

c - Atmel 按钮去抖动不起作用