comment obtenir la taille d'un dir par programmation sous linux?
Je veux obtenir la taille exacte d'un particulier dir dans linux par le biais d'un programme C.
J'ai essayé d'utiliser statfs(chemin d'accès,struct statfs &), mais il n'en donne pas la taille exacte.
J'ai aussi essayé avec stat (), mais il renvoie la taille de 4096 pour tout dir !
Veuillez me suggérer la façon que je peux obtenir la taille exacte de dir tout comme nous obtenons après "du-sh dirPath de la commande".
Aussi je n'ai pas envie de l'utiliser par le biais du système().
Merci d'avance.
L'utilisation du disque (du) et de la somme des tailles de fichier (stat) ne sont pas la même chose. Qui voulez-vous?
stat sur un répertoire de ne pas retourner la somme des tailles de fichier. stat sur un répertoire retourne la quantité d'espace à l'entrée de répertoire lui-même.
stat sur un répertoire de ne pas retourner la somme des tailles de fichier. stat sur un répertoire retourne la quantité d'espace à l'entrée de répertoire lui-même.
OriginalL'auteur | 2009-07-15
Vous devez vous connecter pour publier un commentaire.
Solution Typique
Si vous voulez que la taille d'un répertoire, de la mode à l'uranium appauvri, de créer une fonction récursive. Il est possible de résoudre le problème de manière itérative, mais la solution se prête à la récursivité.
Informations
Voici un lien pour vous aider à démarrer:
http://www.cs.utk.edu/~plank/plank/classes/cs360/360/notes/Prsize/lecture.html
De recherche
Recherche Google avec "stat c programme récursif de la taille de répertoire'
Exemple
Directement à partir de Jim Planche site de, servant de un exemple pour obtenir vous avez commencé.
OriginalL'auteur Dave Jarvis
Vous avez besoin de stat() tous les fichiers dans le répertoire courant et ses sous dossiers et de les additionner.
Envisager d'utiliser un algorithme récursif pour cela.
OriginalL'auteur Byron Whitlock
Si vous ne souhaitez pas utiliser
'system'
, mais sont ok pour utiliser'pipe'
,'fork'
,'execlp'
et'du'
, vous pourriez construire une pipe, une fourchette, un nouveau processus, de rediriger'STDOUT'
de l'enfant dans le tuyau, exec'du'
de l'enfant, et de lire le résultat dans le parent. Un exemple de code serait:OriginalL'auteur jfg956
Je suppose que la solution peut être utile pour ceux qui peuvent rencontrer le problème.
Voici la fonction qui a été écrit à imiter linux
du
programme. Il récursivement tous les répertoires et ajoute les tailles de fichier.Note, que cette fonction est encore incomplète, puisqu'elle se comporte de manière incorrecte sur des liens en dur. Il convient d'en ajouter un conteneur pour stocker des descripteurs de fichiers qui pointent vers le même inode de l'entité et de l'utiliser pour se débarrasser de plusieurs chefs d'accusation de ce même fichier.
lstat()
est utilisé pour gérer les liens symboliques (aka liens souples), des liens en dur est un problème ici.OriginalL'auteur goodmove