Frage

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

Verbrauch:

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

Warum mein Code nicht geben Sie mir den Wert der stat Befehl gibt mir?

Update 1

Das Extrahieren der Haupt Anzahl von 44921876 gibt mir 2, die /dev/tty ist.

Update 2

Die Angabe einer Datei auf dem Dateisystem funktioniert. (Ich verwende nur Python hier, weil es schneller.)

python -c "import sys,os; print os.stat(sys.argv[1]).st_dev" /path/to/file
=> 234881024
War es hilfreich?

Lösung

Versuchen Sie, die st_rdev Mitglied Druck. Das Handbuch Seite sagt:

struct stat {
   dev_t    st_dev;    /* device inode resides on */
   [ ... snip ... ]
   dev_t    st_rdev;   /* device type, for special file inode */
};

Ich glaube, Sie sind nicht das gleiche Feld zu drucken, die% r Formatierer zugreift. Sie sind nicht daran interessiert, in dem Gerät der Gerätedatei ist, aber das Gerät, das die Datei beschreibt.

Die Zahlen sind zumindest im Einklang mit Ihrem ls Ausgang; major = 14 und Moll = 0, und Sie drucken 234881024, die in hex 0xE000000 ist. 0xE ist natürlich, 14 dezimal. Dies zeigt Mac OS X speichert die Major-Nummer in den oberen 8 Bits, und die Minor-Nummer im unteren 24. Dies wiederum bedeutet, dass die dev_t Typ 32-Bit sind, der Druck als long long etwas skeptisch macht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top