2009-10-28 4 views
2

내 프로그램은 /dev/rdisk0과 같은 장치 경로를 읽고 나서 에서 BSD 이름이 disk0 인 디스크를 찾습니다. 이를 위해 /dev/r을 경로에서 제거해야합니다.Mac OS X에서 장치의 BSD 번호를 가져 오는 방법이 있습니까?

이 경로를 하드 코딩하면 Mac OS X의 차후 버전에서 깨질 수 있습니다. 따라서 다른 방법으로는 : IOService과 일치시킬 수있는 BSD 메이저 및 마이너 버전의 장치가 있습니다.

여기 내 질문 : 가능한 경로에서 BSD 부전공 번호를 추출 할 수 있습니까?

답변

3

예. 시스템 콜 stat을 사용하십시오. 당신이 찾고있는 struct stat의 구성원은 st_dev입니다. 이것은 약간 이동 한 후 메이저와 마이너의 OR이라고 생각합니다.

+0

이것은 작동합니다. 'dev_t'는 32 비트 정수이고, 처음 8 비트는 주 버전이고 다른 하나는 부 버전입니다. 'dev_t'가 64 비트 정수로 바뀌면 이식성있는 방법이 있습니까? 내 OpenBSD 컴퓨터에서 에 –

+0

이 있으면 major() 및 minor() 매크로가있는 것 같습니다. – asveikau

+0

@ asveikau : 감사합니다. 나는 그 기능이 어제 내가 그들을 찾을 때 없었던 것을 맹세 할 수 있었다. –