[gelöst] Wie bekomme ich den Computername unter Linux?

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Re: [gelöst] Wie bekomme ich den Computername unter Linux?

Beitrag von Shardik »

Hallo Kukulkan,

zuerst habe ich mich gefragt, warum Du das so kompliziert über API
machst, wenn PureBasic doch die Funktion Hostname() besitzt, wie
NicTheQuick schon angemerkt hatte:

Code: Alles auswählen

InitNetwork()
Debug Hostname()
Allerdings habe ich festgestellt, daß diese Funktion unter MacOS X
anscheinend fehlerhaft arbeitet und dies auch bereits im englischen
MacOS Bug-Unterforum gemeldet. Daraufhin hat freak dazu angemerkt,
daß der Hostname nicht notwendigerweise dem Computernamen
entspricht. Bei meinen Tests war der Computername bei Windows 7 x86,
x64 und andLinux/Kubuntu 9.04 immer identisch mit der Ausgabe von
Hostname(). Nur auf meinem Mac gab es Unterschiede. Ich habe Dein
Code-Beispiel für meine Tests folgendermaßen umgestellt und für den
Mac erweitert:

Code: Alles auswählen

EnableExplicit

CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
  ImportC ""
    CFRelease(CFTypeRef.L)
    CFStringGetCString(CFStringRef.L, *Buffer, BufferSize, Encoding.L)
    CSCopyMachineName()
  EndImport
CompilerEndIf

Procedure.s GetComputerName()
  ; ----- Get computer name (API)
  Protected HostName.S = Space(255)
  Protected Size.I = Len(HostName)

  CompilerSelect #PB_Compiler_OS
    CompilerCase #PB_OS_Linux
      gethostname_(@HostName, Size)
    CompilerCase #PB_OS_MacOS
      Protected HostNameRef.L
      HostNameRef = CSCopyMachineName()
      If HostNameRef
        CFStringGetCString(HostNameRef, @HostName, Size, 0)
      EndIf
    CompilerCase #PB_OS_Windows
      GetComputerName_(HostName, @Size)
  CompilerEndSelect

  ProcedureReturn HostName
EndProcedure

Debug GetComputerName()