1

Bonjour,

je cherche à récupérer les points de montage en cours sur mon PC.
pour le moment j'utilise le résultat que le programme df me renvoie mais ça pose problème lorsqu'ils comportent des espaces.
Par exemple df me donne
Sys. de fich.           1K-blocs       Occupé Disponible Capacité Monté sur
/dev/hda1              6040288   4351320   1382132  76% /
varrun                  513992       128    513864   1% /var/run
varlock                 513992         8    513984   1% /var/lock
procbususb              513992       136    513856   1% /proc/bus/usb
udev                    513992       136    513856   1% /dev
devshm                  513992         0    513992   0% /dev/shm
/dev/mapper/hda5      89002788  38530056  50472732  44% /home
encfs                156250144  20369280 135880864  14% /home/spomky/Espace protégé/Disque dur USB

Pour les premiers aucun problème mais pour le dernier ça coince (il contient des espaces).

Est-ce qu'il existe une fonction issue d'une API qui permet d'avoir un tableau ou autre avec tout ça?

2

Je pense que tu auras le même problème, mais il serait mieux de lire tout simplement le fichier /etc/mtab que la sortie de df
Ensuite concernent les espaces, je ne sais pas quoi te dire.

3

spomky (./1) :
mais pour le dernier ça coince (il contient des espaces).
Comment tu découpes les lignes ? Il n'y a pas moyen de fixer le nombre de colonnes ?

avatar

4

PpHd (./2) :
Je pense que tu auras le même problème, mais il serait mieux de lire tout simplement le fichier /etc/mtab que la sortie de df
Ensuite concernent les espaces, je ne sais pas quoi te dire.

mtab ne me donne pas toutes les info (% disponible, taille, ...)

J'utilise ça au sein de Qt. Pour découper les lignes je fais
QStringList list = resultats_de_df.split("\n");
resultats_de_df est un QString

J'ai trouvé un moyen avec l'expression régulière [^ %]+|\d+. Ça pose toujours problème pour les points de montage avec espace.
Ceci dit le point de montage est la seule chose qui peut en contenir donc c'est vite réglé : pour les 5 premières info je récupère ce que me donne capturedTexts de QRegExp, pour la dernière c'est simplement la fin de la chaine.

5

/proc/qqchose (genre mount) serait a mon avis un meilleur point de départ que prendre la sortie de df... (j'ai pas de linux sous la main donc difficile de t'aider)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

6

c'est comme mtab, il n'y a pas toutes les info. Par contre l'avantage avec /proc/mounts c'est que les espaces sont remplacés par des \040

7

./4 : en partant du fait que l'avant dernière ligne te donne un %, tu peux faire ça :
df | grep -v "1K-blocs" | cut -d\% -f2 | sed -e 's/^ //' | sed -e 's/ /\ /g'
avatar
Il n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

8

il ne suffirait pas de concaténer les dernières chaines si tu as plus que 6 colonnes?

9

Pas besoin de concaténer quoi que ce soit.
Avec le code en dessous ça marche nickel :
QRegExp rx;
rx.setPattern("[^ %]+|\d+");
int pos = 0;
int count = 0;

QStringList finalResult;

while ((pos = rx.indexIn(*resultList_it, pos)) != -1)
{
	QStringList mountPointResult = rx.capturedTexts();
	
	QStringList::iterator mountPointResult_it = mountPointResult.begin();
	while (mountPointResult_it != mountPointResult.end())
	{
		if ( count == 5 )
			finalResult << (*resultList_it).right((*resultList_it).size()-pos);
		if ( count < 5 )
			finalResult << *mountPointResult_it;
		++mountPointResult_it;
		++count;
	}
	pos += rx.matchedLength();
}

Je fais ça pour chaque ligne et le QStringList nommé finalResult contient 6 colonnes avec les info voulues.
C'est peut-être pas optimisé pour le moment mais ça marche très bien.

10

c'est pour faire quoi au final si c'est pas trop indiscret ? ^^
Tekken Punch !!! beuh Love Hina déjà fini ... :'(
Japan-A-Radio
Vertyos@| les modos sont des enculés
Vertyos@| y'a des queues partout, un vrai bonheur'

11

C'est pour faire un GUI à encfs (système de fichiers chiffrés).
Là c'est juste pour lister les points de montage de l'utilisateur.

12

En fait, j'aurai en fait fait un split sur les \n pour avoir les lignes, puis un split sur les espaces et concaténé si nécessaire.

13

spomky (./1) :
Est-ce qu'il existe une fonction issue d'une API qui permet d'avoir un tableau ou autre avec tout ça?
A priori df est open source donc tu peux peut-être tout simplement pomper dedans les fonctions qui t'intéressent ^^ (bon après ça dépend ce que tu veux faire du résultat aussi).
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

14

Soit dit en passant, attention si tu veux faire du "multi UNIX" : df n'est pas la meme commande selon les OS. On trouve notamment des différences entre Solaris, AIX et Linux.
avatar
Il n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

15

ça t'aidera ptet :

mtrapier@prod500 ~/bin $ strace df
execve("/bin/df", ["df"], [/* 33 vars */]) = 0
brk(0)                                  = 0x8052000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fb7000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("tls/i686/sse2/cmov/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("tls/i686/sse2/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("tls/i686/cmov/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("tls/i686/libc.so.6", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("tls/sse2/cmov/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("tls/sse2/libc.so.6", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("tls/cmov/libc.so.6", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("tls/libc.so.6", O_RDONLY)         = -1 ENOENT (No such file or directory)
open("i686/sse2/cmov/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("i686/sse2/libc.so.6", O_RDONLY)   = -1 ENOENT (No such file or directory)
open("i686/cmov/libc.so.6", O_RDONLY)   = -1 ENOENT (No such file or directory)
open("i686/libc.so.6", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("sse2/cmov/libc.so.6", O_RDONLY)   = -1 ENOENT (No such file or directory)
open("sse2/libc.so.6", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("cmov/libc.so.6", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("libc.so.6", O_RDONLY)             = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=81787, ...}) = 0
mmap2(NULL, 81787, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7fa3000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/tls/i686/cmov/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\0`\1\000"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0644, st_size=1307104, ...}) = 0
mmap2(NULL, 1312164, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7e62000
mmap2(0xb7f9d000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x13b) = 0xb7f9d000
mmap2(0xb7fa0000, 9636, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7fa0000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7e61000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb7e618d0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
mprotect(0xb7f9d000, 4096, PROT_READ)   = 0
munmap(0xb7fa3000, 81787)               = 0
brk(0)                                  = 0x8052000
brk(0x8073000)                          = 0x8073000
open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/locale.alias", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=2586, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fb6000
read(3, "# Locale name alias data base.\n#"..., 4096) = 2586
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0xb7fb6000, 4096)                = 0
open("/usr/lib/locale/fr_FR.UTF-8/LC_IDENTIFICATION", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/fr_FR.utf8/LC_IDENTIFICATION", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=384, ...}) = 0
mmap2(NULL, 384, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7fb6000
close(3)                                = 0
open("/usr/lib/gconv/gconv-modules.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=25460, ...}) = 0
mmap2(NULL, 25460, PROT_READ, MAP_SHARED, 3, 0) = 0xb7faf000
close(3)                                = 0
open("/usr/lib/locale/fr_FR.UTF-8/LC_MEASUREMENT", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/fr_FR.utf8/LC_MEASUREMENT", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=23, ...}) = 0
mmap2(NULL, 23, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7fae000
close(3)                                = 0
open("/usr/lib/locale/fr_FR.UTF-8/LC_TELEPHONE", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/fr_FR.utf8/LC_TELEPHONE", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=56, ...}) = 0
mmap2(NULL, 56, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7fad000
close(3)                                = 0
open("/usr/lib/locale/fr_FR.UTF-8/LC_ADDRESS", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/fr_FR.utf8/LC_ADDRESS", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=157, ...}) = 0
mmap2(NULL, 157, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7fac000
close(3)                                = 0
open("/usr/lib/locale/fr_FR.UTF-8/LC_NAME", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/fr_FR.utf8/LC_NAME", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=71, ...}) = 0
mmap2(NULL, 71, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7fab000
close(3)                                = 0
open("/usr/lib/locale/fr_FR.UTF-8/LC_PAPER", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/fr_FR.utf8/LC_PAPER", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=34, ...}) = 0
mmap2(NULL, 34, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7faa000
close(3)                                = 0
open("/usr/lib/locale/fr_FR.UTF-8/LC_MESSAGES", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/fr_FR.utf8/LC_MESSAGES", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
close(3)                                = 0
open("/usr/lib/locale/fr_FR.utf8/LC_MESSAGES/SYS_LC_MESSAGES", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=54, ...}) = 0
mmap2(NULL, 54, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7fa9000
close(3)                                = 0
open("/usr/lib/locale/fr_FR.UTF-8/LC_MONETARY", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/fr_FR.utf8/LC_MONETARY", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=294, ...}) = 0
mmap2(NULL, 294, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7fa8000
close(3)                                = 0
open("/usr/lib/locale/fr_FR.UTF-8/LC_COLLATE", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/fr_FR.utf8/LC_COLLATE", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=880094, ...}) = 0
mmap2(NULL, 880094, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7d8a000
close(3)                                = 0
open("/usr/lib/locale/fr_FR.UTF-8/LC_TIME", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/fr_FR.utf8/LC_TIME", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=2386, ...}) = 0
mmap2(NULL, 2386, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7fa7000
close(3)                                = 0
open("/usr/lib/locale/fr_FR.UTF-8/LC_NUMERIC", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/fr_FR.utf8/LC_NUMERIC", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=54, ...}) = 0
mmap2(NULL, 54, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7fa6000
close(3)                                = 0
open("/usr/lib/locale/fr_FR.UTF-8/LC_CTYPE", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/fr_FR.utf8/LC_CTYPE", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=238336, ...}) = 0
mmap2(NULL, 238336, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7d4f000
close(3)                                = 0
open("/etc/mtab", O_RDONLY)             = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=1316, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7d4e000
read(3, "/dev/sda6 / ext3 rw,errors=remou"..., 4096) = 1316
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0xb7d4e000, 4096)                = 0
open("/usr/share/locale/fr_FR.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/fr_FR.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/fr_FR/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/fr.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/fr.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/fr/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/fr_FR.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/fr_FR.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/fr_FR/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/fr.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/fr.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/fr/LC_MESSAGES/coreutils.mo", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=276406, ...}) = 0
mmap2(NULL, 276406, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7d0b000
close(3)                                = 0
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 1), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7d0a000
write(1, "Sys. de fich.           1K-blocs"..., 79Sys. de fich.           1K-blocs       Occupé Disponible Capacité Monté sur
) = 79
statfs64("/", 84, {f_type="EXT2_SUPER_MAGIC", f_bsize=4096, f_blocks=4773509, f_bfree=596240, f_bavail=353760, f_files=2424832, f_ffree=1634490, f_fsid={378521221, -481216505}, f_namelen=255, f_frsize=4096}) = 0
write(1, "/dev/sda6             19094036  "..., 58/dev/sda6             19094036  16709076   1415040  93% /
) = 58
statfs64("/sys", 84, {f_type="SYSFS_MAGIC", f_bsize=4096, f_blocks=0, f_bfree=0, f_bavail=0, f_files=0, f_ffree=0, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
statfs64("/var/run", 84, {f_type=0x1021994, f_bsize=4096, f_blocks=129286, f_bfree=129256, f_bavail=129256, f_files=129286, f_ffree=129224, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
write(1, "varrun                  517144  "..., 65varrun                  517144       120    517024   1% /var/run
) = 65
statfs64("/var/lock", 84, {f_type=0x1021994, f_bsize=4096, f_blocks=129286, f_bfree=129286, f_bavail=129286, f_files=129286, f_ffree=129284, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
write(1, "varlock                 517144  "..., 66varlock                 517144         0    517144   0% /var/lock
) = 66
statfs64("/proc/bus/usb", 84, {f_type=0x1021994, f_bsize=4096, f_blocks=129286, f_bfree=129255, f_bavail=129255, f_files=129286, f_ffree=126328, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
write(1, "procbususb              517144  "..., 70procbususb              517144       124    517020   1% /proc/bus/usb
) = 70
statfs64("/dev", 84, {f_type=0x1021994, f_bsize=4096, f_blocks=129286, f_bfree=129255, f_bavail=129255, f_files=129286, f_ffree=126328, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
write(1, "udev                    517144  "..., 61udev                    517144       124    517020   1% /dev
) = 61
statfs64("/dev/shm", 84, {f_type=0x1021994, f_bsize=4096, f_blocks=129286, f_bfree=129282, f_bavail=129282, f_files=129286, f_ffree=129284, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
write(1, "devshm                  517144  "..., 65devshm                  517144        16    517128   1% /dev/shm
) = 65
statfs64("/dev/pts", 84, {f_type="DEVPTS_SUPER_MAGIC", f_bsize=4096, f_blocks=0, f_bfree=0, f_bavail=0, f_files=0, f_ffree=0, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
statfs64("/lib/modules/2.6.20-15-generic/volatile", 84, {f_type=0x1021994, f_bsize=4096, f_blocks=129286, f_bfree=120839, f_bavail=120839, f_files=129286, f_ffree=129269, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
write(1, "lrm                     517144  "..., 96lrm                     517144     33788    483356   7% /lib/modules/2.6.20-15-generic/volatile
) = 96
statfs64("/boot", 84, {f_type="EXT2_SUPER_MAGIC", f_bsize=1024, f_blocks=52690, f_bfree=16717, f_bavail=13906, f_files=28112, f_ffree=28074, f_fsid={-723209085, -1873029095}, f_namelen=255, f_frsize=1024}) = 0
write(1, "/dev/sda2                52690  "..., 62/dev/sda2                52690     35973     13906  73% /boot
) = 62
statfs64("/home", 84, {f_type="REISERFS_SUPER_MAGIC", f_bsize=4096, f_blocks=2558256, f_bfree=174379, f_bavail=174379, f_files=0, f_ffree=0, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
write(1, "/dev/sda3             10233024  "..., 62/dev/sda3             10233024   9535508    697516  94% /home
) = 62
statfs64("/media/winxp", 84, {f_type=0x5346544e, f_bsize=4096, f_blocks=11848999, f_bfree=1487586, f_bavail=1487586, f_files=424192, f_ffree=44520, f_fsid={1157071063, 1581578152}, f_namelen=255, f_frsize=4096}) = 0
write(1, "/dev/sda1             47395996  "..., 69/dev/sda1             47395996  41445652   5950344  88% /media/winxp
) = 69
statfs64("/proc/fs/nfsd", 84, {f_type=0x6e667364, f_bsize=4096, f_blocks=0, f_bfree=0, f_bavail=0, f_files=0, f_ffree=0, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
statfs64("/proc/sys/fs/binfmt_misc", 84, {f_type=0x42494e4d, f_bsize=4096, f_blocks=0, f_bfree=0, f_bavail=0, f_files=0, f_ffree=0, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
statfs64("/var/lib/nfs/rpc_pipefs", 84, {f_type=0x67596969, f_bsize=4096, f_blocks=0, f_bfree=0, f_bavail=0, f_files=0, f_ffree=0, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
close(1)                                = 0
munmap(0xb7d0a000, 4096)                = 0
exit_group(0)                           = ?
Process 16035 detached


hehe
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

16

Je pense qu'il va te sauter au cou de joie.

17

Sally (./13) :
spomky (./1) :
Est-ce qu'il existe une fonction issue d'une API qui permet d'avoir un tableau ou autre avec tout ça?
A priori df est open source donc tu peux peut-être tout simplement pomper dedans les fonctions qui t'intéressent ^^ (bon après ça dépend ce que tu veux faire du résultat aussi).

Oui exact, en fait le code source est super simple à comprendre.
Je vais reprendre les fonctions utilisées ça sera tout aussi bien.
Godzil (./15) :
ça t'aidera ptet :

mtrapier@prod500 ~/bin $ strace df
...


hehe

Nickel! C'est vrai qu'avoir les appels système est de loin le moyen le plus efficace... m'enfin entre nous je préfère lire le code source ; chacun sont truc.

18

Godzil (./5) :
/proc/qqchose (genre mount) serait a mon avis un meilleur point de départ que prendre la sortie de df... (j'ai pas de linux sous la main donc difficile de t'aider)

Je suis pas d'accord : utiliser /proc fait que ton programme ne fonctionnera que sous Linux.
Utiliser df te permettra d'être portable sur tous les systèmes GNU.
Et si tu te restreins aux options et formats standardisés, t'es portable à tous les systèmes non exotiques.

19

spectras (./19) :
Utiliser df te permettra d'être portable sur tous les systèmes GNU.


Ca reste pas glop : un df sous linux donne un résultat différent d'un df sous solaris. Deux versions de df peuvent donner des résultats différents. Ca ajoute une dépendance à ton machin...
avatar
Il n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

20

de toute, toucher au points de montage est trop spécifique a un unix..
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

21


Ca reste pas glop : un df sous linux donne un résultat différent d'un df sous solaris. Deux versions de df peuvent donner des résultats différents. Ca ajoute une dépendance à ton machin...

En principe, posix définit un df -P qui donne la même sortie quel que soit le système. Il me semble que le df de GNU et celui de Sun l'implémentent tous les deux.
The format of the default output from df is unspecified, but all space figures are reported in 512-byte units, unless the -k option is specified.
[...]
-P
Produce output in the format described in the STDOUT section.
[...]
The remaining output with -P shall consist of one line of information for each specified file system. These lines shall be formatted as follows:

"%s %d %d %d %d%% %s\n", <file system name>, <total space>,
    <space used>, <space free>, <percentage used>,
    <file system root>

In the following list, all quantities expressed in 512-byte units (1024-byte when -k is specified) shall be rounded up to the next higher unit. The fields are:

<file system name>
The name of the file system, in an implementation-defined format.
<total space>
The total size of the file system in 512-byte units. The exact meaning of this figure is implementation-defined, but should include <space used>, <space free>, plus any space reserved by the system not normally available to a user.
<space used>
The total amount of space allocated to existing files in the file system, in 512-byte units.
<space free>
The total amount of space available within the file system for the creation of new files by unprivileged users, in 512-byte units. When this figure is less than or equal to zero, it shall not be possible to create any new files on the file system without first deleting others, unless the process has appropriate privileges. The figure written may be less than zero.
<percentage used>
The percentage of the normally available space that is currently allocated to all files on the file system. This shall be calculated using the fraction:

<space used>/( <space used>+ <space free>)

expressed as a percentage. This percentage may be greater than 100 if <space free> is less than zero. The percentage value shall be expressed as a positive integer, with any fractional result causing it to be rounded to the next highest integer.

<file system root>
The directory below which the file system hierarchy appears.

Source : IEEE Std 1003.1

22

spectras (./21) :
En principe, posix définit un df -P qui donne la même sortie quel que soit le système. Il me semble que le df de GNU et celui de Sun l'implémentent tous les deux.

C'est ce que j'utilise : df -P -H
le -H pour avoir des taiiles de volume du type 161G au lieu de 156250144 par exemple

23

Eh oui, mais non. L'option -H n'est pas dans le standard. Dès que tu l'utilises tu t'exposes à des comportements différents en fonction du système, ce qui retire tout l'intérêt d'utiliser la commande df pour obtenir l'information.

En plus, faire à la main une division par 1048576 c'est pas non plus la mer à boire ^^

24

spectras (./23) :
Eh oui, mais non. L'option -H n'est pas dans le standard. Dès que tu l'utilises tu t'exposes à des comportements différents en fonction du système, ce qui retire tout l'intérêt d'utiliser la commande df pour obtenir l'information.

En plus, faire à la main une division par 1048576 c'est pas non plus la mer à boire ^^

Bon bah OK je laisse tomber le -H.
Je sais que faire une division c'est pas la mer à boire mais si une option existe déjà pour les faire autant l'utiliser.

25

a la limite tu peut faire un `df --help | grep -e " -H "` pour verifier qu'il supporte avant de l'executer avec le -H cheeky
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

26

C'est plus la peine d'y penser j'ai opté pour la division quoi qu'il en soit grin
C'est plus simple que de faire une fonction qui va vérifier si le -H est possible et puis de faire une division dans le cas contraire.

27

c'est mon fun

et puis les unix qui prennent pas -h sont de plus en plus rare
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.