为什么带孔的文件比没有孔的文件有更小的磁盘块?

时间:2014-11-06 08:43:16

标签: linux unix



#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;
&#13;
&#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;

2 个答案:

答案 0 :(得分:1)

为什么你认为没有洞的文件需要更小的空间?这恰恰相反。 如果文件有漏洞,则无需为该空间保留磁盘块。 磁盘块的数量与文件的传播无关,但与您在文件中写入的数据的大小直接相关。

答案 1 :(得分:0)

硬盘上数据块的分配并不计算文件系统存储数据所需的块数。由于文件系统可以在不同文件之间使用块,所以如果这些块靠得很近或很远都没关系。

因此输出显示file.hole仅占用硬盘中的8个块,而不是它们所在的位置。