2010-06-20 32 views
4

我想知道一個辦法,找出至極是通過函數或者在C編譯器常數磁盤的塊大小..如何找到文件系統塊大小?

感謝

+5

哪個OS解決我的問題? _____ – kennytm 2010-06-20 20:29:36

+0

你的意思是文件系統的塊大小? – 2010-06-20 20:30:41

+0

磁盤頁面大小?你的意思是羣集大小?這將取決於文件系統和文件系統設置/配置 – jdehaan 2010-06-20 20:31:14

回答

13

你使用gcc編譯器的信息不感興趣,因爲編譯器對文件系統的塊大小不感興趣,他們甚至不知道文件系統可以存在的事實...答案是系統特定的(MS Windows?GNU/Linux或其他OS/nix/* nix)? ;對POSIX你有stat功能,你可以用它來有統計結構,其中包含了場st_blksize(塊大小的文件系統I/O),這可能是你感興趣的問題。

地址

實施例

#include <sys/types.h> 
#include <sys/stat.h> 
#include <unistd.h> 
#include <stdio.h> 


int main() 
{ 
    struct stat fi; 
    stat("/", &fi); 
    printf("%d\n", fi.st_blksize); 
    return 0; 
} 

告訴你上/(根)使用文件系統;例如對我來說,它輸出4096.

+0

所以在Linux中,我可以使用這個結構?我很抱歉,我是一個begginer。你可以在一個例子中使用它嗎? – 2010-06-20 21:01:41

+1

開始閱讀例如http://linux.die.net/man/2/stat,看看它是你想知道的 – ShinTakezou 2010-06-20 21:03:37

+0

好的,謝謝我真的希望它完成一個有關磁盤結構的學校項目(tree b +,hashing等)謝謝 – 2010-06-21 16:16:38

2

statvfs()報告文件系統。 stat()報告給定文件。幾乎總是這樣,但是因爲你要求文件系統的結果,POSIX系統的正確答案是調用statvfs()。

+0

沒有錯的,但是我不知道,當這些值不匹配 – ShinTakezou 2010-06-23 14:30:04

+0

參閱fstyp -v的/ dev/VX/DSK/r1sp1dbdg/sapdata31 的VxFS 版本:5 f_bsize:8192 f_frsize:1024 – 2010-06-23 14:48:18

+0

我無法得到上面的輸出格式正確。抱歉。 - HPUX vxfs可能會顯示。 – 2010-06-23 14:49:34

-4

我找到了解決我的問題的另一種方法。

在gcc上有一個函數返回頁面大小。

我使用爲getpagesize()

printf("%d\n",getpagesize()); 
+7

頁面大小!= FS塊大小 – rpj 2011-02-25 03:00:32

+2

這是***完全錯誤***。 – 2015-03-06 07:51:33