2012-05-12 92 views
1

所以,我有一個任務,基本上是比較與庫函數相對的系統調用速度的練習。我們正在對通過stdin從文件中獲取的字符串進行排序。我們應該確定文件是否是普通文件或者不使用fstat。我已經通讀了手冊頁,雖然我知道它做了什麼,但我在解決如何使用它時遇到了問題。使用fstat來確定文件類型

我知道它返回一個stat結構,所以我可以從字面上做一個變量並將其存儲嗎?例如:

int n; 
struct stat *val; 
n = fstat(0, val); 

這是你如何得到結構?它是否返回其他地方?我需要訪問off_t st_size變量,所以我知道該文件有多少個字節。並且可以將其轉換爲int嗎?

此外,顯然你可以使用st_mode字段來檢查文件是否正常(使用宏S_ISREG),但是......如何?它是否真的返回假或什麼?這很煩人,因爲我可以找到所有這些文件告訴我這些字段是什麼,但不知道如何使用它們。

如果我有一個常規文件,我應該分配足夠的內存在任何函數調用之前存儲它。如果不是,那麼我在閱讀時會重新分配內存。我已經完成了第二部分,我只是不知道如何正確使用fstat。

+0

如果你想讓他們得到回答,你真的需要用語言開始標記你的問題。 –

回答

2

fstat不分配內存,你需要給它預先分配空間的地址。例如:

int n; 
struct stat myStat; 
n = fstat(0, &myStat); 

注意缺少指針。

+0

http://www.go4expert.com/articles/understanding-linux-fstat-example-t27449/ – MrPickles7