2014-11-06 18 views
0

爲什麼帶孔的文件比不帶孔的文件有更小的磁盤塊?

#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 

爲什麼用孔文件有比無孔文件磁盤塊少?

在我的思想,沒有孔文件需要更小的磁盤塊

由於與孔文件超過無孔鋪展..

從「UNIX環境3 - 史蒂文斯拉戈高級編程,例如3.2 「

+0

你是如何創建一個洞的文件? – 2014-11-06 08:56:08

回答

1

爲什麼你認爲沒有洞的文件需要更小的空間?這完全相反。 如果文件存在漏洞,則不需要爲該空間預留磁盤塊。 磁盤塊的數量與文件的傳播無關,但與您在文件中寫入的數據的大小直接相關。

+0

謝謝你的簡單解釋。 – 2014-11-06 10:51:46

0

硬盤上的數據塊分佈不會計算文件系統存儲數據所需的塊數。由於文件系統可以使用不同文件之間的塊,所以塊靠得很近或很遠就沒關係。

所以輸出顯示你file.hole只佔用硬盤中的8個塊,而不是他們在哪裏。