我目前正在开展一个涉及将一个非常大的文件(大约6GB)从一个Linux服务器传输到另一个Linux服务器的项目.服务器在Debian Squeeze上运行.为了实现我的主要目标,我最初将文件的名称和大小发送到目标计算机,并创建一个空文件,用于存储我从源计算机逐步接收的数据块.我的问题是在我的服务器中创建一个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);
}
}
Run Code Online (Sandbox Code Playgroud)
我使用Linux dd命令,因为我认为这将是创建空6GB文件的最快方法.但是,完成大约需要15分钟.有没有办法更快地创建空文件?我究竟做错了什么?
感谢您的时间.
真诚的,尼克