Seite 1 von 1

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

Verfasst: 25.03.2011 18:28
von Kukulkan
Hallo,

gibt es eine schnelle und zuverlässige PureBasic-Funktion, um unter Linux den Computernamen zu erhalten?

(Windows-API: GetComputerName_(), Linux-API: ???)

Danke,

Kukulkan

Re: Wie bekomme ich den Computername unter Linux?

Verfasst: 25.03.2011 18:39
von STARGÅTE
Hast du mal unter den Umgebungsvariablen geguckt ?
Edit: Die Frage war so gemeint wie es da steht, also nicht rhetorisch ... also bitte mal gucken ...

Code: Alles auswählen

If ExamineEnvironmentVariables()
  While NextEnvironmentVariable()
    Debug EnvironmentVariableName() + " = " + EnvironmentVariableValue()
  Wend
EndIf
[...]
COMPUTERNAME = MARTIN
[...]
Somit wäre auch die API überflüssig ...

Re: Wie bekomme ich den Computername unter Linux?

Verfasst: 25.03.2011 19:07
von Kukulkan
Hallo,

das ist eine gute Idee. Werd ich mir Montag ansehen. Danke!

Kukulkan

Re: Wie bekomme ich den Computername unter Linux?

Verfasst: 25.03.2011 20:01
von NicTheQuick
Bei mir gibt es keine Variable mit dem Namen "COMPUTERNAME" unter Ubuntu.

Re: Wie bekomme ich den Computername unter Linux?

Verfasst: 25.03.2011 20:04
von RSBasic
Wie sieht es mit "$HOST"/"HOST" aus?
de.kioskea.net hat geschrieben:$HOST: Schickt den Namen des Computers zurück.

Re: Wie bekomme ich den Computername unter Linux?

Verfasst: 25.03.2011 21:04
von iostream
Probier mal im Terminal

Code: Alles auswählen

uname --help
Denke mal -n ist das was du suchst.

Re: Wie bekomme ich den Computername unter Linux?

Verfasst: 25.03.2011 21:13
von NicTheQuick
Oder einfacher
hostname
:wink:

Re: Wie bekomme ich den Computername unter Linux?

Verfasst: 28.03.2011 16:51
von Kukulkan
Hallo,

Das mit den Umgebungsvariablen war mir doch zu unsicher. Ich hab deshalb mal nach Linux Apis gegoogelt und hier im Forum gestöbert. Das ist bei rausgekommen:

Code: Alles auswählen

Procedure.s GetComputerName()
  ; get computer name (API)
  Hostname.s = Space(255): Size.l = 255
  CompilerIf #PB_Compiler_OS = #PB_OS_Linux
    gethostname_(@HostName.s, 255)
    ProcedureReturn Trim(Hostname.s)
  CompilerEndIf  
  
  CompilerIf #PB_Compiler_OS = #PB_OS_Windows
    GetComputerName_(Hostname.s, @Size.l)
    ProcedureReturn Left(Hostname.s, Size.l)
  CompilerEndIf
EndProcedure
Funktioniert hier einwandfrei!

PS. Meine Quelle war am Ende dann hier: http://www.gnu.org/software/libtool/man ... x.html#Top

Grüße,

Kukulkan

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

Verfasst: 16.06.2011 22:45
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()