Hostname
Find the name of the host on which the routine is running.

You are encouraged to solve this task according to the task description, using any language you may know.
- Task
Works with GCC/GNAT
with Ada.Text_IO; use Ada.Text_IO;
with GNAT.Sockets;
procedure Demo is
begin
Put_Line (GNAT.Sockets.Host_Name);
end Demo;
println (System.hostname)STRING hostname;
get(read OF execve child pipe("/bin/hostname","hostname",""), hostname);
print(("hostname: ", hostname, new line))host name of (system info)
(system "hostname -f")print sys\hostname
- Output:
drkameleons-Mac.home
MsgBox % A_ComputerName
via Windows Management Instrumentation (WMI)
for objItem in ComObjGet("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_ComputerSystem")
MsgBox, % "Hostname:`t" objItem.Name
$ awk 'BEGIN{print ENVIRON["HOST"]}'
E51A08ZD
PRINT "Hostname: ", HOSTNAME$
Since Windows 2000 :
Hostname
To assign it to a variable:
for /f "tokens=*" %%a in ('hostname') do set "hostname=%%a"
Hostname.exe will not print out the correct hostname if %_CLUSTER_NETWORK_NAME_% is populated.[1]
Alternatively, use %COMPUTERNAME% (shell variable):[2]
set computername
echo %computername%
This variable can be changed to another value.
You can also get hostname values from the registry:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName\ComputerName
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName\ComputerName
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Hostname
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\NV
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Domain
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\NV DomainMore details here: https://groups.google.com/g/microsoft.public.win32.programmer.kernel/c/HI-c-Le7360
' ============================================
' https://rosettacode.org/wiki/Hostname
' BazzBasic: https://github.com/EkBass/BazzBasic
' ============================================
[inits]
LET resp$
[main]
resp$ = SHELL("HOSTNAME")
[output]
PRINT resp$
' Output:
' EK-Lenovo
INSTALL @lib$+"SOCKLIB"
PROC_initsockets
PRINT "hostname: " FN_gethostname
PROC_exitsockets
#include <stdlib.h>
#include <stdio.h>
#include <limits.h>
#include <unistd.h>
int main(void)
{
char name[_POSIX_HOST_NAME_MAX + 1];
return gethostname(name, sizeof name) == -1 || printf("%s\n", name) < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
}
System.Net.Dns.GetHostName();
Write ##class(%SYS.System).GetNodeName()
(.. java.net.InetAddress getLocalHost getHostName)
java -cp clojure.jar clojure.main -e "(.. java.net.InetAddress getLocalHost getHostName)"
identification division.
program-id. hostname.
data division.
working-storage section.
01 hostname pic x(256).
01 nullpos pic 999 value 1.
procedure division.
call "gethostname" using hostname by value length of hostname
string hostname delimited by low-value into hostname
with pointer nullpos
display "Host: " hostname(1 : nullpos - 1)
goback.
end program hostname.
os = require 'os'
console.log os.hostname()
Another operating system feature that is implemented differently across lisp implementations. Here we show how to create a function that obtains the required result portably by working differently for each supported implementation. This technique is heavily used to make portable lisp libraries.
(defun get-host-name ()
#+(or sbcl ccl) (machine-instance)
#+clisp (let ((s (machine-instance))) (subseq s 0 (position #\Space s)))
#-(or sbcl ccl clisp) (error "get-host-name not implemented"))
Another way is to use the FFI to access POSIX' gethostname(2):
(cffi:defcfun ("gethostname" c-gethostname) :int
(buf :pointer) (len :unsigned-long))
(defun get-hostname ()
(cffi:with-foreign-object (buf :char 256)
(unless (zerop (c-gethostname buf 256))
(error "Can't get hostname"))
(values (cffi:foreign-string-to-lisp buf))))
BOA> (get-hostname)
"aurora"
hostname = System.hostname
import std.stdio, std.socket;
void main() {
writeln(Socket.hostName());
}
program ShowHostName;
{$APPTYPE CONSOLE}
uses Windows;
var
lHostName: array[0..255] of char;
lBufferSize: DWORD;
begin
lBufferSize := 256;
if GetComputerName(lHostName, lBufferSize) then
Writeln(lHostName)
else
Writeln('error getting host name');
end.
Retrieving the HOSTNAME environment variable
If the environment variable HOSTNAME has been exported to the DuckDB environment, its value can be obtained using the getenv() function. For example:
$ HOSTNAME=`hostname` duckdb -c "select getenv('HOSTNAME');"
┌────────────────────┐
│ getenv('HOSTNAME') │
│ varchar │
├────────────────────┤
│ Mac-mini.local │
└────────────────────┘
Importing the value of `hostname`
Assuming that DuckDB is executing in an environment in which there is a `hostname` command, the hostname can be viewed using one of DuckDB's "dot" commands as illustrated here:
.system hostname Mac-mini.local
The value so obtained, however, is not directly available as an SQL value. This can be overcome by using one of the following workarounds:
"shellfs" extension
`shellfs` is a community extension which can also be used to import the hostname as follows:
D INSTALL shellfs from community; -- once is enough
D LOAD shellfs;
D SELECT * from read_csv('hostname|', header=false, columns={'hostname': 'VARCHAR'});
┌────────────────┐
│ hostname │
│ varchar │
├────────────────┤
│ Mac-mini.local │
└────────────────┘
"Dynamic SQL"
One can also use DuckDB to generate the string for creating a suitable scalar function or variable, and then using `.read` to execute that string.
For example, using "SET VARIABLE" (introduced in DuckDB V1.1), you could proceed as follows:
D .shell hostname | sed -e 's/^/set variable hostname=\"/; s/$/\";/' > dynamic.tmp
D .read dynamic.tmp
D SELECT getvariable('hostname');
┌─────────────────────────┐
│ getvariable('hostname') │
│ varchar │
├─────────────────────────┤
│ Mac-mini.local │
└─────────────────────────┘
makeCommand("hostname")()[0].trim()Not exactly a good way to do it. A better way ought to be introduced along with a proper socket interface.
(system-name)
Host = net_adm:localhost().
printfn "%s" (System.Net.Dns.GetHostName())
USE: io.sockets
host-name
include unix/socket.fs
hostname type
The function/subroutine HOSTNM is a GNU extension.
program HostTest
character(len=128) :: name
call hostnm(name)
print *, name
end program HostTest
Using fortran 2003 C-interoperability we can call posix C function gethostname (unix system call) directly
program test_hostname
use, intrinsic :: iso_c_binding
implicit none
interface !to function: int gethostname(char *name, size_t namelen);
integer(c_int) function gethostname(name, namelen) bind(c)
use, intrinsic :: iso_c_binding, only: c_char, c_int, c_size_t
integer(c_size_t), value, intent(in) :: namelen
character(len=1,kind=c_char), dimension(namelen), intent(inout) :: name
end function gethostname
end interface
integer(c_int) :: status
integer,parameter :: HOST_NAME_MAX=255
character(kind=c_char,len=1),dimension(HOST_NAME_MAX) :: cstr_hostname
integer(c_size_t) :: lenstr
character(len=:),allocatable :: hostname
lenstr = HOST_NAME_MAX
status = gethostname(cstr_hostname, lenstr)
hostname = c_to_f_string(cstr_hostname)
write(*,*) hostname, len(hostname)
contains
! convert c_string to f_string
pure function c_to_f_string(c_string) result(f_string)
use, intrinsic :: iso_c_binding, only: c_char, c_null_char
character(kind=c_char,len=1), intent(in) :: c_string(:)
character(len=:), allocatable :: f_string
integer i, n
i = 1
do
if (c_string(i) == c_null_char) exit
i = i + 1
end do
n = i - 1 ! exclude c_null_char
allocate(character(len=n) :: f_string)
f_string = transfer(c_string(1:n), f_string)
end function c_to_f_string
end program test_hostname
' FB 1.05.0 Win64
' On Windows 10, the command line utility HOSTNAME.EXE prints the 'hostname' to the console.
' We can execute this remotely and read from its 'stdin' stream as follows:
Dim As String hostname
Open Pipe "hostname" For Input As #1
Input #1, hostname
Close #1
Print hostname
Print
Print "Press any key to quit"
Sleep
hostname
or
uname -n
callJava["java.net.InetAddress", "getLocalHost"].getHostName[]
include "NSLog.incl"
NSLog( @"%@", fn ProcessInfoHostName )
HandleEvents
Click this link to run this code
Public Sub Main()
Print System.Host
End
Output:
charlie
Use os.Hostname.
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println(os.Hostname())
}
println InetAddress.localHost.hostName
? NetName()
import Network.BSD
main = do hostName <- getHostName
putStrLn hostName
Or if you don't want to depend on the network package being installed, you can implement it on your own (this implementation is based on the implementation in the network package).
module GetHostName where
import Foreign.Marshal.Array ( allocaArray0, peekArray0 )
import Foreign.C.Types ( CInt(..), CSize(..) )
import Foreign.C.String ( CString, peekCString )
import Foreign.C.Error ( throwErrnoIfMinus1_ )
getHostName :: IO String
getHostName = do
let size = 256
allocaArray0 size $ \ cstr -> do
throwErrnoIfMinus1_ "getHostName" $ c_gethostname cstr (fromIntegral size)
peekCString cstr
foreign import ccall "gethostname"
c_gethostname :: CString -> CSize -> IO CInt
main = do hostName <- getHostName
putStrLn hostName
hostname = GETENV('computername')
NB. Load the socket libraries
load 'socket'
coinsert 'jsocket'
NB. fetch and implicitly display the hostname
> {: sdgethostname ''
NB. If fetching the hostname is the only reason for loading the socket libraries,
NB. and the hostname is fetched only once, then use a 'one-liner' to accomplish it:
> {: sdgethostname coinsert 'jsocket' [ load 'socket'
import java.net.InetAddress;
import java.net.UnknownHostException;
void printHostname() throws UnknownHostException {
InetAddress localhost = InetAddress.getLocalHost();
System.out.println(localhost.getHostName());
}
penguin
var network = new ActiveXObject('WScript.Network');
var hostname = network.computerName;
WScript.echo(hostname);
Currently jq does not have a "gethostname" or a "system" command, so the best ways for a jq program to have access to the hostname are via an environment variable, or via a command line argument, as illustrated here:
HOST=$(hostname) jq -n --arg hostname $(hostname) '[env.HOST, $hostname]'
- Output:
[ "mini.local", "mini.local" ]
var hn = exec("hostname", {retAll:true}).data.trim();
println(gethostname())
- Output:
harlan
_h
- Output:
`"narasimman-pc"
// version 1.1.4
import java.net.InetAddress
fun main(args: Array<String>) {
println(InetAddress.getLocalHost().hostName)
}
This will ge the hostname as reported by the web server
[web_request->httpHost]
-> www.myserver.com
This will ge the hostname as reported by the system OS
define host_name => thread {
data
public initiated::date, // when the thread was initiated. Most likely at Lasso server startup
private hostname::string // as reported by the servers hostname
public onCreate() => {
.reset
}
public reset() => {
if(lasso_version(-lassoplatform) >> 'Win') => {
protect => {
local(process = sys_process('cmd',(:'hostname.exe')))
#process -> wait
.hostname = string(#process -> readstring) -> trim&
#process -> close
}
else
protect => {
local(process = sys_process('/bin/hostname'))
#process -> wait
.hostname = string(#process -> readstring) -> trim&
#process -> close
}
}
.initiated = date(date -> format(`yyyyMMddHHmmss`)) // need to set format to get rid of nasty hidden fractions of seconds
.hostname -> size == 0 ? .hostname = 'undefined'
}
public asString() => .hostname
}
host_name
-> mymachine.local
(net_adm:localhost)
lpBuffer$=Space$(128) + Chr$(0)
struct SIZE,sz As Long
SIZE.sz.struct=Len(lpBuffer$)
calldll #kernel32, "GetComputerNameA",lpBuffer$ as ptr, SIZE as struct, result as Long
CurrentComputerName$=Trim$(Left$(lpBuffer$, SIZE.sz.struct))
print CurrentComputerName$As with nearly anything in Inferno, it boils down to reading a file:
implement Hostname;
include "sys.m"; sys: Sys;
include "draw.m";
Hostname: module {
init: fn(nil: ref Draw->Context, nil: list of string);
};
init(nil: ref Draw->Context, nil: list of string)
{
sys = load Sys Sys->PATH;
buf := array[Sys->ATOMICIO] of byte;
fd := sys->open("/dev/sysname", Sys->OREAD);
if(fd == nil)
die("Couldn't open /dev/sysname");
n := sys->read(fd, buf, len buf - 1);
if(n < 1)
die("Couldn't read /dev/sysname");
buf[n++] = byte '\n';
sys->write(sys->fildes(1), buf, n);
}
die(s: string)
{
sys->fprint(sys->fildes(2), "hostname: %s: %r", s);
raise "fail:errors";
}
Sys->ATOMICIO is usually 8 kilobytes; this version truncates if you have a ridiculously long hostname.
sx = xtra("Shell").new()
if the platform contains "win" then
hostname = sx.shell_cmd("hostname", ["eol":RETURN]).line[1] -- win 7 or later
else
hostname = sx.shell_cmd("hostname", RETURN).line[1]
end ifanswer the hostNameRequires: LuaSocket
socket = require "socket"
print( socket.dns.gethostname() )
Module Host {
\\ one way
Print computer$
\\ second way
Declare objNetwork "WScript.Network"
With objNetwork, "ComputerName" as cName$
Print cName$, cName$=Computer$
Declare objNetwork Nothing
}
HostSockets:-GetHostName()
$MachineName
This is a built-in MATLAB function. "failed" is a Boolean which will be false if the command sent to the OS succeeds. "hostname" is a string containing the system's hostname, provided that the external command hostname exists.
[failed,hostname] = system('hostname')
echo -ag $hostMODULE Hostname EXPORTS Main;
IMPORT IO, OSConfig;
BEGIN
IO.Put(OSConfig.HostName() & "\n");
END Hostname.
Write $Piece($System,":")/* NetRexx */
options replace format comments java crossref savelog symbols binary
say InetAddress.getLocalHost.getHostName
(! "hostname")
There are several ways to get the host name, for instance reading the environment variable HOSTNAME or calling the low level Posix function “gethostname”. The simplest way consists to use the function “getHostName” from module “nativeSockets”:
import nativesockets
echo getHostName()
Works with oo2c version 2
MODULE HostName;
IMPORT
OS:ProcessParameters,
Out;
BEGIN
Out.Object("Host: " + ProcessParameters.GetEnv("HOSTNAME"));Out.Ln
END HostName.
Output:
Host: localhost.localdomain
use Net;
bundle Default {
class Hello {
function : Main(args : String[]) ~ Nil {
TCPSocket->HostName()->PrintLine();
}
}
}Cocoa / Cocoa Touch / GNUstep:
NSLog(@"%@", [[NSProcessInfo processInfo] hostName]);
Example Output:
2010-09-16 16:20:00.000 Playground[1319:a0f] sierra117.local // Hostname is sierra117.local.
Unix.gethostname()
Similarly to MATLAB, we could call system command hostname to know the hostname. But we can also call the internal function uname() which returns a structure holding several informations, among these the hostname (nodename):
uname().nodename
These solutions are platform specific.
Windows Platform
A solution using ActiveX/OLE on Windows
say .oleObject~new('WScript.Network')~computerName
and one using the Windows environment variables
say value('COMPUTERNAME',,'environment')
UNIX Platform
Some UNIX solutions (tested under Mac OS X):
ooRexx (and Rexx) can issue commands directly to the shell it's running under. Output of the shell commands will normally be STDOUT and STDERR. These next two samples will simply output the host name to the console if the program is run from a command prompt.
- Note: The address command clause causes the contents of the literal string that follows it to be sent to the command shell.
address command 'hostname -f'
address command "echo $HOSTNAME"
Command output can also be captured by the program to allow further processing. ooRexx provides an external data queue manager (rxqueue) that can be used for this. In the following examples output written to STDOUT/STDERR is piped into rxqueue which sends it in turn to a Rexx queue for further processing by the program:
/* Rexx */
address command "echo $HOSTNAME | rxqueue"
address command "hostname -f | rxqueue"
loop q_ = 1 while queued() > 0
parse pull hn
say q_~right(2)':' hn
end q_
A utility class is also provided as a wrapper around the external data queue:
/* Rexx */
qq = .rexxqueue~new()
address command "echo $HOSTNAME | rxqueue"
address command "hostname -f | rxqueue"
loop q_ = 1 while qq~queued() > 0
hn = qq~pull()
say q_~right(2)':' hn
end q_
{System.showInfo {OS.getHostByName 'localhost'}.name}Running the hostname or uname program and capturing its output (the first line of output) in a string.
str = externstr("hostname")[1];
str = externstr("uname -n")[1];For Windows systems see the Delphi example. On Unix systems, FreePascal has the function GetHostName:
Program HostName;
uses
unix;
begin
writeln('The name of this computer is: ', GetHostName);
end.
Output example on Mac OS X:
The name of this computer is: MyComputer.local
## System.Net.Dns.GetHostName.Print
use Sys::Hostname;
$name = hostname;
without js -- (system_exec, file i/o)
constant tmp = "hostname.txt",
cmd = iff(platform()=WINDOWS?"hostname":"uname -n")
{} = system_exec(sprintf("%s > %s",{cmd,tmp}),4)
string host = trim(get_text(tmp))
{} = delete_file(tmp)
?host
- Output:
"Pete-PC"
echo $_SERVER['HTTP_HOST'];
echo php_uname('n');
echo gethostname();
This will just print the hostname:
(call 'hostname)To use it as a string in a program:
(in '(hostname) (line T))import System;
int main(){
write(gethostname() + "\n");
}
os.execute("hostname > tmp")
local hostname = io.contents("tmp"):rstrip()
print($"Hostname is {hostname}")
os.remove("tmp")
SET serveroutput on
BEGIN
DBMS_OUTPUT.PUT_LINE(UTL_INADDR.GET_HOST_NAME);
END;
lvars host = sys_host_name();This retreives the localhost's name:
HOST NAME TO hostname$This attempts to retreive the name of an arbitrary machine on the network (assuming ipAddress& is valid):
HOST NAME ipAddress& TO hostname$Windows systems have the ComputerName environment variable which can be used:
$Env:COMPUTERNAME
Also PowerShell can use .NET classes and methods:
[Net.Dns]::GetHostName()
InitNetwork()
answer$=Hostname()
import socket
host = socket.gethostname()
Sys.info provides information about the platform that R is running on. The following code returns the hostname as a string.
Sys.info()[["nodename"]]
Note that Sys.info isn't guaranteed to be available on all platforms. As an alternative, you can call an OS command.
system("hostname", intern = TRUE)
... or retrieve an environment variable
env_var <- ifelse(.Platform$OS.type == "windows", "COMPUTERNAME", "HOSTNAME")
Sys.getenv(env_var)
#lang racket/base
(require racket/os)
(gethostname)
(formerly Perl 6)
my $host = qx[hostname];
print read dns://
REGINA and PC/REXX under most MS NT Windows
This REXX solution is for REGINA and PC/REXX under the Microsoft NT family of Windows (XP, Vista, 7, etc).
Other names could be used for the 3rd argument.
The computername is the same as the output for the hostname.exe program.
say value('COMPUTERNAME',,"ENVIRONMENT")
say value('OS',,"ENVIRONMENT")
output (using Windows/XP)
GERARD46 Windows_NT
R4 and ROO under most MS NT Windows
This REXX solution is for R4 and ROO under the Microsoft NT family of Windows (XP, Vista, 7, etc).
Other names could be used for the 3rd argument.
say value('COMPUTERNAME',,"SYSTEM")
say value('OS',,"SYSTEM")
MS DOS (without Windows), userid
Under Microsoft DOS (with no Windows), the closest thing to a name of a host would be the userid.
say userid()
MS DOS (without Windows), version of DOS
But perhaps the name or version of the MS DOS system would be more appropriate than the userid.
'VER' /*this passes the VER command to the MS DOS system. */
Each REXX interpreter has their own name (some have multiple names) for the environmental variables.
Different operating systems may call their hostnames by different identifiers.
IBM mainframes (at one time) called the name of the host as a nodename and it needn't be
specified, in which case an asterisk (*) is returned.
I recall (perhaps wrongly) that Windows/95 and Windows/98 had a different environmental name for the name of the host.
UNIX Solution
This solution is platform specific and uses features that are available to the Regina implementation of Rexx.
- Tested with Regina on Mac OS X. Should work on other UNIX/Linux distros.
/* Rexx */
address command "hostname -f" with output stem hn.
do q_ = 1 to hn.0
say hn.q_
end q_
exit
require 'socket'
host = Socket.gethostnameprint Platform$ ' OS where Run BASIC is being hosted
print UserInfo$ ' Information about the user's web browser
print UserAddress$ ' IP address of the userWorks on windows and linux with crate hostname version 0.1.5
fn main() {
match hostname::get_hostname() {
Some(host) => println!("hostname: {}", host),
None => eprintln!("Could not get hostname!"),
}
}cc os
host-info?println(java.net.InetAddress.getLocalHost.getHostName)(use posix)
(get-host-name)(gethostname)The library socket.s7i defines the function getHostname, which returns the hostname.
$ include "seed7_05.s7i";
include "socket.s7i";
const proc: main is func
begin
writeln(getHostname);
end func;var sys = frequire('Sys::Hostname');
var host = sys.hostname;Or:
var host = `hostname`.chomp;Platform current nodeName(hostname)OperatingSystem getHostName output = host(4,"HOSTNAME")
endselect host_name from v$instance;SELECT HOST_NAME FROM SYSIBMADM.ENV_SYS_INFOOutput:
HOST_NAME --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- hostname 1 record(s) selected.
NetHostDB.getHostName ()Swift 3
print(ProcessInfo.processInfo.hostName)The basic introspection tool in TCL is the info command. It can be used to find out about the version of the current Tcl or Tk, the available commands and libraries, variables, functions, the level of recursive interpreter invocation, and, amongst a myriad other things, the name of the current machine:
set hname [info hostname]2 import gethostname
1024 chars is-array foo
foo 1024 gethostname
foo type$$ MODE TUSCRIPT
host=HOST ()hostnameor
uname -nout (ursa.net.localhost.name) endl consoleThe user-defined hostname function ignores its argument and returns a string.
#import cli
hostname = ~&hmh+ (ask bash)/<>+ <'hostname'>!For example, the following function returns the square root of its argument if it's running on host kremvax, but otherwise returns the square.
#import flo
creative_accounting = (hostname== 'kremvax')?(sqrt,sqr)Set objNetwork = CreateObject("WScript.Network")
WScript.Echo objNetwork.ComputerNameecho hostname()Option Explicit
Private Declare Function GetComputerName Lib "kernel32.dll" Alias "GetComputerNameW" _
(ByVal lpBuffer As Long, ByRef nSize As Long) As Long
Private Const MAX_COMPUTERNAME_LENGTH As Long = 31
Private Const NO_ERR As Long = 0
Private Function Hostname() As String
Dim i As Long, l As Long, s As String
s = Space$(MAX_COMPUTERNAME_LENGTH)
l = Len(s) + 1
i = GetComputerName(StrPtr(s), l)
Debug.Assert i <> 0
Debug.Assert l <> 0
Hostname = Left$(s, l)
End Function
Sub Main()
Debug.Assert Hostname() = Environ$("COMPUTERNAME")
End SubIn Vlang, the "main()" entry point and declaration can be skipped in one file programs and when used like a script.
import os
println(os.hostname())Uses the 'os' sub-module.
import "os" for Platform
System.print(Platform.hostName)!ys-0
defn main():
host =: sh-out('hostname')
say: host- Output:
$ ys hostname.ys blacktop
System.hostnameOr open a server socket, which contains the hostname.
Network.TCPServerSocket.open(8080).hostname