Como o status de trabalho ()?
Pergunta
stattest.c:
// compile: gcc -o stattest stattest.c
#include <stdio.h>
#include <sys/stat.h>
int main(int argc, char *argv[]) {
struct stat stats;
stat(argv[1], &stats);
printf("%lli\n", (long long)stats.st_dev);
return 0;
}
Uso:
stat -f "%r" /dev/disk0 => 234881024 (Value that I'm looking for.) ./teststat /dev/disk0 => 44921876 python -c 'import os,sys; print os.stat(sys.argv[1]).st_dev' /dev/disk0 => 44921876
Por que não o meu código de me dar o valor do comando stat
me dá?
Update 1
Extraindo o maior número de 44921876 me dá 2, que é /dev/tty
.
Update 2
A especificação de um arquivo sobre as obras do sistema de arquivos. (Eu só estou usando python aqui porque é mais rápido.)
python -c "import sys,os; print os.stat(sys.argv[1]).st_dev" /path/to/file => 234881024
Solução
Tente imprimir o membro st_rdev
. A página do manual diz:
struct stat {
dev_t st_dev; /* device inode resides on */
[ ... snip ... ]
dev_t st_rdev; /* device type, for special file inode */
};
Eu acho que você não está imprimindo o mesmo campo que os acessos formatador% r. Você não está interessado no dispositivo o arquivo de dispositivo estiver ligado, mas o dispositivo que o arquivo descreve.
Os números são pelo menos consistentes com a sua saída ls
; major = 14 e minor = 0, e você imprimir 234.881.024, que em hexadecimal é 0xE000000. 0xE é, naturalmente, 14 decimal. Isso indica Mac OS X armazena o número grande no top 8 bits, e o menor número na parte inferior 24. Este, por sua vez, implica que o tipo dev_t
é de 32 bits, o que torna o seu imprimi-lo como long long
um pouco duvidoso.