#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);
}
&#13;
我是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
为什么带孔的文件比没有孔的文件有更少的磁盘块?
根据我的想法,没有空洞的文件占用较小的磁盘块
因为带孔的文件比没有孔的文件更具扩展性。
来自&#34; UNIX环境中的高级编程3rd-Stevens Rago,示例3.2&#34;
答案 0 :(得分:1)
为什么你认为没有洞的文件需要更小的空间?这恰恰相反。 如果文件有漏洞,则无需为该空间保留磁盘块。 磁盘块的数量与文件的传播无关,但与您在文件中写入的数据的大小直接相关。
答案 1 :(得分:0)
硬盘上数据块的分配并不计算文件系统存储数据所需的块数。由于文件系统可以在不同文件之间使用块,所以如果这些块靠得很近或很远都没关系。
因此输出显示file.hole
仅占用硬盘中的8个块,而不是它们所在的位置。