Réponses:
La commande system_profiler fournit une réponse directe qui est facilement lisible par l'homme (en supposant que vous utilisez la version 10.3 ou une version plus récente), mais vous pouvez également utiliser ioreg pour la tâche, car elle se termine généralement plus rapidement.
system_profiler SPHardwareDataType
est le type de données qui contient les informations de base sur le matériel. Vous pouvez utiliser grep ou awk pour réduire les éléments au besoin:
system_profiler SPHardwareDataType | awk '/Serial/ {print $4}'
ou
ioreg -l | awk '/IOPlatformSerialNumber/ { print $4;}'
L’exécution de ces deux commandes prend entre 0,5 et 0,2 seconde sur un Mac SSD moderne, donc si vous souhaitez optimiser la commande et supprimer le message « vous pouvez obtenir votre réponse en 0.005s ou plus:
ioreg -c IOPlatformExpertDevice -d 2 | awk -F\" '/IOPlatformSerialNumber/{print $(NF-1)}'
Cela fonctionne aussi…
ioreg -l | grep IOPlatformSerialNumber
awk
version de supprimer les 600 lignes de ioreg
sortie que nous ne voulons pas voir. (aussi - ne dérange pas les électeurs qui se
Pour faciliter la mémorisation, utilisez une recherche insensible à la casse:
ioreg -l | grep -i serialnumber | grep -i platform
Exemple C ++:
#include <CoreFoundation/CoreFoundation.h>
#include <IOKit/IOKitLib.h>
std::string
getSerialNumber()
{
CFStringRef serial;
char buffer[32] = {0};
std::string seriaNumber;
io_service_t platformExpert = IOServiceGetMatchingService(kIOMasterPortDefault,
IOServiceMatching("IOPlatformExpertDevice"));
if (platformExpert)
{
CFTypeRef serialNumberAsCFString = IORegistryEntryCreateCFProperty(platformExpert,
CFSTR(kIOPlatformSerialNumberKey),
kCFAllocatorDefault, 0);
if (serialNumberAsCFString) {
serial = (CFStringRef)serialNumberAsCFString;
}
if (CFStringGetCString(serial, buffer, 32, kCFStringEncodingUTF8)) {
seriaNumber = buffer;
}
IOObjectRelease(platformExpert);
}
return seriaNumber;
}
ioreg
est presque instantané sur mon MBPR.system_profiler
bien que plus rapide sur ce mac que mes plus anciens est beaucoup plus lent.