문제

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

용법:

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 산출; major = 14 및 minor = 0, 당신은 234881024를 인쇄합니다. 0xe는 물론 14 소수점입니다. 이것은 Mac OS X가 상위 8 비트에 주요 숫자를 저장하고 24의 작은 숫자를 저장 함을 나타냅니다. dev_t 유형은 32 비트로 인쇄를 만듭니다. long long 조금 모호합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top