我正在使用$ho = $raw_wrap->{"field_hours_$x"}['und'][0]['value'];
$days_array[$x]['hours_open'] = date('H:i', strtotime($ho));
$hc = $raw_wrap->{"field_hours_$x"}['und'][0]['value2'];
$days_array[$x]['hours_close'] = date('H:i', strtotime($hc));
测试性能,以便在Linux 6.4下复制大文件。
我的代码遵循以下逻辑,并使用gcc编译
sendfile()
}
read_fd = open (argv[1], O_RDONLY);
fstat(read_fd, &stat_buf);
write_fd = open (argv[2], O_WRONLY | O_CREAT, stat_buf.st_mode);
left_to_write = stat_buf.st_size;
while (left_to_write > 0) {
written=sendfile (write_fd, read_fd, &offset, stat_buf.st_size);
if (written == -1)
return -1;
else {
left_to_write -= written;
bytes_done=stat_buf.st_size-left_to_write;
printf("%ld bytes written, %ld bytes left to write\n", written, left_to_write);
}
close(read_fd);
close(write_fd); /* this takes minutes */
来电非常快;我可以看到它大约每5秒写一次2GB的块。
当sendfile()
循环结束时,它会在while
之前保持几分钟,然后才能成功完成。
为什么close(output)
需要这么长时间才能运行?它是否正在冲洗缓冲区?我怎样才能让它更快?
答案 0 :(得分:1)
这是由于回写。 close(output)
必须报告尚未报告的任何写入错误;例如,它必须确保已分配数据所需的所有块,否则报告ENOSPC
。
close()
返回时,数据不一定写入磁盘;如果你想要这个,你需要拨打fsync()
(并忍受更长时间的等待)。
另见手册页的NOTES部分。