2009-10-28 12 views
2

Mon programme lit les chemins de périphérique comme /dev/rdisk0 de l'entrée, puis il recherche IOKit pour un disque portant le nom BSD disk0. Pour cela, je dois supprimer /dev/r du chemin.Existe-t-il un moyen d'obtenir le numéro BSD d'un périphérique sous Mac OS X?

Le codage dur de ce chemin peut se rompre dans les futures versions de Mac OS X. Par conséquent, je pense d'une autre manière: je pourrais faire correspondre le IOService en utilisant la version BSD Major et Minor du périphérique.

Voici ma question: est-il possible d'extraire les numéros BSD mineurs et majeurs d'un chemin?

Répondre

3

Oui. Utilisez le syscall stat. Le membre de struct stat que vous cherchez est st_dev, qui je crois est un OU de majeur et mineur après un peu de décalage.

+0

Cela fonctionne. 'dev_t' est un entier de 32 bits, les 8 premiers bits sont la version majeure et les 24 autres sont la version mineure. Y at-il un moyen de rendre ce portable dans le cas où 'dev_t' est changé en un entier de 64 bits? –

+0

dans sur ma machine OpenBSD, il semble y avoir des macros majeur() et mineur() pour cela. – asveikau

+0

@ asveikau: Merci, je les ai trouvés. Je pourrais jurer que ces fonctions n'étaient pas là hier quand je les ai cherchées. –