#include <fcntl.h>
#include <unistd.h>
char buf1[] = "abcdefghij";
char buf2[] = "ABCDEFGHIJ";
char buf3[10];
int
main(void)
{
int fd;
if ((fd = creat("file.hole", FILE_MODE)) < 0) {
err_sys("creat error");
}
if (write(fd, buf1, 10) != 10) { // offset is now = 10
err_sys("buf1 write error");
}
if (lseek(fd, 16380, SEEK_SET) == -1) { // offset now = 16380
err_sys("lseek error");
}
if (write(fd, buf2, 10) != 10) { // offset now = 16390
err_sys("buf2 write error");
}
close(fd);
if ((fd = open("file.hole", O_RDWR)) == -1) {
err_sys("failed to re-open file");
}
ssize_t n;
ssize_t m;
while ((n = read(fd, buf3, 10)) > 0) {
if ((m = write(STDOUT_FILENO, buf3, 10)) != 10) {
err_sys("stdout write error");
}
}
if (n == -1) {
err_sys("buf3 read error");
}
exit(0);
}
我是unix系统编程的新手
有带孔的打码文件。
输出结果为:
$ls -ls file.hole file.nohole
8 -rw-r--r-- 1 sar 16394 time file.hole
20 -rw-r--r-- 1 sar 16394 time file.nohole
为什么有洞的文件比没有洞的文件有更少的磁盘 block ?
在我看来,没有空洞的文件需要更小的磁盘 block
因为有孔的文件比没有孔的文件传播得更多..
来自“UNIX 环境高级编程 3rd-Stevens Rago,示例 3.2”
最佳答案
为什么你认为没有孔的文件占用的空间更小?这恰恰相反。 如果文件有漏洞,则没有必要为该空间保留磁盘 block 。 磁盘 block 的数量与文件的传播无关,而是与你在文件中写入的数据大小直接相关。
关于linux - 为什么有孔的文件比没有孔的文件具有更小的磁盘 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26775062/