Stocker la sortie de la commande Unix en code C

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; } 

Sortie:

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

J’ai obtenu la sortie de la commande dans la variable buf. Mais je dois obtenir la valeur de Capacity (4 dans ce cas) dans une variable entière. Je pense que la commande cut ou awk peut être utilisée, mais je ne sais pas comment la faire fonctionner exactement.

Toute aide est appréciée.

Si vous souhaitez utiliser des outils shell, vous devez écrire un script shell.

Si cela doit vraiment être en C, vous devez utiliser les appels système fournis par POSIX au lieu de regrouper les éléments via popen . Dans ce cas, ce serait statvfs et le membre f_favail de la structure statvfs .

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

Remplacez votre commande df par df -P /myLoc | awk '{print $5}' | tail -n 1 | cut -d'%' -f 1 df -P /myLoc | awk '{print $5}' | tail -n 1 | cut -d'%' -f 1 df -P /myLoc | awk '{print $5}' | tail -n 1 | cut -d'%' -f 1 .

Cela retournera 4 dans votre cas. Ensuite, vous pouvez utiliser atoi() pour le convertir en un int.

Mais comme d’autres l’ont suggéré, l’utilisation d’appels système devrait au moins être plus portable.