2013-05-28 121 views
0
int main() { 
    char buf[100]; 
    FILE *fp = popen("df -P /myLoc", "r"); 
    while (fgets(buf, 100, fp) != NULL) { 
     printf("%s", buf); 
    } 
    pclose(fp); 

    return 0; 
} 

輸出:輸出商店

Filesystem    512-blocks Used Available Capacity Mounted on 
/dev0/vol0    123456  3456 5464675  4% /sys 

我得到命令的buf中可變的輸出。但是我需要將Capacity的值(在這種情況下爲4)變成一個整型變量。我認爲可以使用cut或awk命令,但不知道如何使其正確工作。

任何幫助表示讚賞。

+2

'df -P | awk'{print $ 5}'爲你工作? – jweyrich

+1

可能是'fstatfs'或'statfs'比運行'df'命令更好。 – Rohan

+0

df -P | awk'{print $ 5}' - 這個列名和值一起給出。我只需要價值。 – user32262

回答

6

如果你想使用shell工具,你應該編寫一個shell腳本。

如果確實必須使用C語言,則應該使用POSIX提供的系統調用,而不是通過popen將事物串聯起來。在你的情況下,將是statvfsstatvfs結構的成員f_favail

#include <stdio.h> 
#include <sys/types.h> 
#include <sys/statvfs.h> 

int main() 
{ 
    struct statvfs buf; 
    statvfs("/my/path", &buf); 
    printf("Free: %lu", buf.f_favail); 

    return 0; 
} 
+0

您能否請舉一個例子來說明如何在C代碼中使用statvfs? – user32262

+0

我沒有獲得容量值(在問題示例中爲4)。我在輸出中獲得了一些價值,但不確定它反映了什麼。 – user32262

+1

@ user32262如果我可以打擾您閱讀文檔:http://linux.die.net/man/2/statvfs您將需要從總索引節點和可用索引中自己計算百分比。 – pmr

2

df -P /myLoc | awk '{print $5}' | tail -n 1 | cut -d'%' -f 1替換您df命令。

這將返回4你的情況。然後你可以使用atoi()將它轉換爲int。

但正如其他人所說的使用系統調用應該至少更便攜。

+0

我收到此錯誤 - sed:函數s/\%// gi無法解析。 – user32262

+0

嘗試使用'cut',我會更新我的答案以反映這一點。出於好奇,操作系統是什麼? – Nobilis

+0

這工作,它的HP Unix。 – user32262