Risposte:
Il comando system_profiler fornisce una risposta diretta che è facilmente leggibile dall'uomo (supponendo che tu sia su 10.3 o più recente), ma puoi anche usare ioreg per l'attività poiché generalmente si completa più velocemente.
system_profiler SPHardwareDataType
è il tipo di dati che contiene le informazioni hardware di base e puoi usare grep o awk per ridurre ulteriormente le cose se necessario:
system_profiler SPHardwareDataType | awk '/Serial/ {print $4}'
o
ioreg -l | awk '/IOPlatformSerialNumber/ { print $4;}'
Entrambi questi comandi richiedono tra 0,5 e 0,2 secondi per essere eseguiti sui moderni Mac SSD, quindi se si desidera ottimizzare il comando e rimuovere " è possibile avere la risposta in circa 0,005 secondi:
ioreg -c IOPlatformExpertDevice -d 2 | awk -F\" '/IOPlatformSerialNumber/{print $(NF-1)}'
Funziona anche ...
ioreg -l | grep IOPlatformSerialNumber
awk
versione rimuovere le 600 linee di ioreg
output che non vogliamo vedere. (inoltre - non preoccupatevi degli elettori negativi - ad alcune persone in realtà non piacciono le risposte brevi o dimenticano che non tutti sanno come funzionano grep e awk.)
Per semplificare la memorizzazione, utilizzare una ricerca senza distinzione tra maiuscole e minuscole:
ioreg -l | grep -i serialnumber | grep -i platform
Esempio 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
uno è vicina istante sul mio MBPR.system_profiler
anche se più veloce su questo Mac rispetto ai miei più vecchi è molto più lento.