سؤال

stattest.ج:

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

الاستخدام:

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

لماذا لا قانون بلدي أعطني القيمة stat الأمر يعطي لي ؟

تحديث 1

استخراج الرئيسية عدد من 44921876 يعطيني 2 وهو /dev/tty.

تحديث 2

تحديد الملفات على نظام الملفات الذي يعمل.(أنا فقط باستخدام بيثون هنا لأنه أسرع.)

python -c "import sys,os; print os.stat(sys.argv[1]).st_dev" /path/to/file
=> 234881024
هل كانت مفيدة؟

المحلول

حاول طباعة st_rdev الأعضاء.دليل الصفحة يقول:

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

أعتقد أنك لا الطباعة نفس المجال أن %r المنسق يصل.كنت لا ترغب في الجهاز الجهاز الملف ولكن الجهاز هذا الملف يصف.

الأرقام تتماشى على الأقل مع ls الإخراج ؛ الرئيسية=14 طفيفة=0, طباعة 234881024 التي في عرافة هو 0xE000000.0xE هو, بالطبع, 14 عشري.يشير هذا إلى نظام التشغيل Mac OS X المتاجر الكبرى رقم في أعلى 8 بت ، الطفيفة في عدد أقل من 24.وهذا بدوره يعني أن dev_t نوع 32 بت ، مما يجعل الطباعة الخاصة بك كما long long قليلا مشكوك فيها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top