Получить имя моего компьютера Mac - PullRequest
37 голосов
/ 31 октября 2010

Как я могу получить имя компьютера на Mac? Я говорю о том же имени, которое вы можете найти в System Profiler в разделе «Программное обеспечение».

Ответы [ 6 ]

70 голосов
/ 04 ноября 2010

Цель C

Имя, которое я искал:

[[NSHost currentHost] localizedName];

Он возвращает «MacBook Джонатана», а не «Jonathans-Macbook» или «jonathans-macbook.local», который возвращает name.

Swift 3

Для Swift> = 3 использовать.

if let deviceName = Host.current().localizedName {
   print(deviceName)
}
11 голосов
/ 31 октября 2010

NSHost - это то, что вы хотите здесь:

NSHost *host;

host = [NSHost currentHost];
[host name];
8 голосов
/ 19 сентября 2014

Я использую sysctlbyname ("kern.hostname"), который не блокирует.Обратите внимание, что мой вспомогательный метод должен использоваться только для получения строковых атрибутов, а не целых чисел.

#include <sys/sysctl.h>

- (NSString*) systemInfoString:(const char*)attributeName
{
    size_t size;
    sysctlbyname(attributeName, NULL, &size, NULL, 0); // Get the size of the data.
    char* attributeValue = malloc(size);
    int err = sysctlbyname(attributeName, attributeValue, &size, NULL, 0);
    if (err != 0) {
        NSLog(@"sysctlbyname(%s) failed: %s", attributeName, strerror(errno));
        free(attributeValue);
        return nil;
    }
    NSString* vs = [NSString stringWithUTF8String:attributeValue];
    free(attributeValue);
    return vs;
}

- (NSString*) hostName
{
    NSArray* components = [[self systemInfoString:"kern.hostname"] componentsSeparatedByString:@"."];
    return [components][0];
}
7 голосов
/ 12 марта 2012

Использование SystemConfiguration.framework , которое вы должны добавить в свой проект:

#include <SystemConfiguration/SystemConfiguration.h>

...

// Returns NULL/nil if no computer name set, or error occurred. OSX 10.1+
NSString *computerName = [(NSString *)SCDynamicStoreCopyComputerName(NULL, NULL) autorelease];

// Returns NULL/nil if no local hostname set, or error occurred. OSX 10.2+
NSString *localHostname = [(NSString *)SCDynamicStoreCopyLocalHostName(NULL) autorelease];
2 голосов
/ 14 ноября 2011

Вот тот, который не блокирует:

NSString* name = [(NSString*)CSCopyMachineName() autorelease];
1 голос
/ 20 июня 2018

в терминале у вас есть это:

system_profiler SPSoftwareDataType | grep "Computer Name" | cut -d: -f2 | tr -d [:space:]

тогда в C вы можете получить это с:

  FILE* stream = popen("system_profiler SPSoftwareDataType | grep \"Computer Name\" | cut -d: -f2 | tr -d [:space:]", "r");
  ostringstream hoststream;

  while(!feof(stream) && !ferror(stream))
  {
      char buf[128];
      int byteRead = fread( buf, 1, 128, stream);
      hoststream.write(buf, byteRead);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...