Pete: Add a Limbo version

{{task|Programming environment operations}}[[Category:Networking and Web Interaction]]

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

Works with GCC/GNAT
with Ada.Text_IO; use Ada.Text_IO;
with GNAT.Sockets;

procedure Demo is
Put_Line (GNAT.Sockets.Host_Name);
end Demo;

=={{header|ALGOL 68}}==

{{works with|ALGOL 68G|Any - tested with release mk15-0.8b.fc9.i386}}

{{works with|POSIX|.1}}
STRING hostname;
get(read OF execve child pipe("/bin/hostname","hostname",""), hostname);
print(("hostname: ", hostname, new line))


println (System.hostname)

MsgBox % A_ComputerName

$ awk 'BEGIN{print ENVIRON["HOST"]}'

=={{header|BBC BASIC}}==
{{works with|BBC BASIC for Windows}}
PRINT "hostname: " FN_gethostname

{{works with|gcc|4.0.1}}

{{works with|POSIX|.1}}

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;

=={{header|C sharp|C#}}==

=={{header|Caché ObjectScript}}==
Write ##class(%SYS.System).GetNodeName()


(.. getLocalHost getHostName)

java -cp clojure.jar clojure.main -e "(.. getLocalHost getHostName)"


os = require 'os'
console.log os.hostname()

=={{header|Common Lisp}}==
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 ()
#+sbcl (machine-instance)
#+clisp (let ((s (machine-instance))) (subseq s 0 (position #\Space s)))
#-(or sbcl 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)

import std.stdio, std.socket;

void main() {

program ShowHostName;


uses Windows;

lHostName: array[0..255] of char;
lBufferSize: DWORD;
lBufferSize := 256;
if GetComputerName(lHostName, lBufferSize) then
Writeln('error getting host name');



Not exactly a good way to do it. A better way ought to be introduced along with a proper socket interface. [[Category:E examples needing attention]]

printfn "%s" (System.Net.Dns.GetHostName())


{{works with|GNU Forth|0.7.0}}
include unix/socket.fs

hostname type

Host = net_adm:localhost().

=={{header|friendly interactive shell}}==
{{trans|UNIX Shell}}

uname -n

{{works with|gfortran}}

The function/subroutine HOSTNM is a GNU extension.
program HostTest
character(len=128) :: name
call hostnm(name)
print *, name
end program HostTest

package main

import (

func main() {
host, _ := os.Hostname()
fmt.Printf("hostname: %s\n", host)


println InetAddress.localHost.hostName


? Netname()

import Network.BSD
main = do hostName <- getHostName
putStrLn hostName

=={{header|Icon}} and {{header|Unicon}}==
procedure main()

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'

class DiscoverHostName {
public static void main(final String[] args) {
try {
} catch (UnknownHostException e) { // Doesn't actually happen, but Java requires it be handled.

{{works with|JScript}}
var network = new ActiveXObject('WScript.Network');
var hostname = network.computerName;

This will ge the hostname as reported by the web server

This will ge the hostname as reported by the system OS
define host_name => thread {

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() => {

public reset() => {
if(lasso_version(-lassoplatform) >> 'Win') => {
protect => {
local(process = sys_process('cmd',(:'hostname.exe')))
#process -> wait
.hostname = string(#process -> readstring) -> trim&
#process -> close
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



-> mymachine.local

=={{header|Liberty BASIC}}==
lpBuffer$=Space$(128) + Chr$(0)
struct SIZE,sz As Long$)

calldll #kernel32, "GetComputerNameA",lpBuffer$ as ptr, SIZE as struct, result as Long

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;
# Technically, this program is wrong if the hostname is longer than 8k.
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";

Requires: LuaSocket
socket = require "socket"
print( socket.dns.gethostname() )



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')

=={{header|mIRC Scripting Language}}==
echo -ag $host



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")


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.


use Net;

bundle Default {
class Hello {
function : Main(args : String[]) ~ Nil {


Similarly to [[Discover the Hostname#MATLAB|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):


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|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}

For Windows systems see the [[Hostname#Delphi | Delphi]] example.
On Unix systems, FreePascal has the function GetHostName:
Program HostName;


writeln('The name of this computer is: ', GetHostName);

Output example on Mac OS X:

The name of this computer is: MyComputer.local

{{works with|Perl|5.8.6}}

use Sys::Hostname;

$name = hostname;

=={{header|Perl 6}}==
my $host = qx[hostname];


echo php_uname('n');

{{works with|PHP|5.3+}}
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");

SET serveroutput on

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:
Also PowerShell can use .NET classes and methods:

{{works with|PureBasic|4.41}}

{{works with|Python|2.5}}
import socket
host = socket.gethostname()

=={{header|R}}== provides information about the platform that R is running on. The following code returns the hostname as a string.[["nodename"]]
Note that 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")


#lang racket/base
(require mzlib/os)

print system/network/host

===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('OS',,"ENVIRONMENT")

'''output''' (using Windows/XP)


===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('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_

require 'socket'
host = Socket.gethostname

=={{header|Run BASIC}}==
print Platform$ ' OS where Run BASIC is being hosted
print UserInfo$ ' Information about the user's web browser
print UserAddress$ ' IP address of the user


{{works with|Chicken Scheme}}
(use posix)

{{works with|Guile}}

The library [ socket.s7i]
defines the function [ getHostname],
which returns the hostname.

$ include "seed7_05.s7i";
include "socket.s7i";

const proc: main is func
end func;

Platform current nodeName


output = host(4,"HOSTNAME")

=={{header|Standard ML}}==
NetHostDB.getHostName ()

{{works with|Smalltalk/X}}
OperatingSystem getHostName

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


host=HOST ()

=={{header|UNIX Shell}}==
uname -n

The 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)

{{omit from|ACL2}}
{{omit from|Locomotive Basic|Does not have a hostname.}}
{{omit from|ML/I}}
{{omit from|PARI/GP}}
{{omit from|TI-83 BASIC}} {{omit from|TI-89 BASIC}}
{{omit from|Unlambda|Does not have network access.}}
{{omit from|ZX Spectrum Basic|Does not have a hostname.}}