Manpages

名 前

gethostname, sethostname − ホ ス ト 名 の 取 得 ・ 設 定 を す る

書 式

#include <unistd.h>

int gethostname(char *name, size_t len);
int sethostname(const char *
name, size_t len);

glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):

gethostname():

glibc 2.12 以 降 : _BSD_SOURCE || _XOPEN_SOURCE >= 500
|| /* glibc 2.12 以 降 : */ _POSIX_C_SOURCE >= 200112L

sethostname():

_BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)

説 明

こ れ ら の シ ス テ ム コ ー ル は 、 現 在 の プ ロ セ ッ サ の ホ ス ト 名 を 取 得 ・ 変 更 す る た め に 使 用 さ れ る 。

sethostname() は 、 ホ ス ト 名 を 、 文 字 配 列 name で 指 定 さ れ た 値 に 設 定 す る 。 引 き 数 len に は 、 name の バ イ ト 数 を 指 定 す る (そ の た め 、 name で は 文 字 列 終 端 の ヌ ル バ イ ト は 必 要 な い )。

gethostname() は 、 NULL 終 端 さ れ た ホ ス ト 名 を 、 len バ イ ト の 長 さ の 文 字 配 列 name に 格 納 し て 返 す 。 ヌ ル 終 端 さ れ た ホ ス ト 名 が 格 納 先 の バ ッ フ ァ ー よ り も 長 い 場 合 は 、 ホ ス ト 名 は 切 り 詰 め ら れ 、 エ ラ ー は 返 さ れ な い (下 記 の 「 注 意 」 の 節 を 参 照 )。 POSIX.1−2001 で は 、 結 果 の 切 り 詰 め が 発 生 し た 場 合 に 、 返 さ れ た バ ッ フ ァ ー に 終 端 の ヌ ル バ イ ト が 含 ま れ て い る か ど う か は 規 定 さ れ て い な い 。

返 り 値

成 功 し た 場 合 は 0 が 返 さ れ る 。 エ ラ ー の 場 合 は −1 が 返 さ れ 、 errno が 適 切 に 設 定 さ れ る 。

エ ラ ー

EFAULT

name が 不 正 な ア ド レ ス で あ る 。

EINVAL

len が 負 で あ る 。 sethostname() に お い て len が 許 容 さ れ た 最 大 サ イ ズ を 越 え て い る 。

ENAMETOOLONG

(glibc gethostname() で ) len が 実 際 の ホ ス ト 名 の 長 さ よ り も 小 さ い (glibc バ ー ジ ョ ン 2.1 よ り 前 で は 、 こ の 状 況 で EINVAL が 使 用 さ れ る )。

EPERM

sethostname() に お い て 、 呼 び 出 し た 人 が CAP_SYS_ADMIN ケ ー パ ビ リ テ ィ (capability) を 持 っ て い な か っ た 。

準 拠

SVr4, 4.4BSD (こ れ ら の イ ン タ ー フ ェ ー ス は 4.2BSD で 初 め て 登 場 し た )。 POSIX.1−2001 で は gethostname() に つ い て は 規 定 し て い る が 、 sethostname() は 規 定 し て い な い 。

注 意

SUSv2 で は 「 ホ ス ト 名 が 255 バ イ ト に 制 限 さ れ る 」 こ と を 保 証 し て い る 。 POSIX.1−2001 で は 「 ホ ス ト 名 (終 端 の ヌ ル バ イ ト は 含 ま な い ) が HOST_NAME_MAX バ イ ト に 制 限 さ れ る 」 こ と を 保 証 し て い る 。 Linux で は 、 HOST_NAME_MAX は 64 に 定 義 さ れ て お り 、 Linux 1.0 以 降 で は こ れ が 上 限 と な っ て き た (も っ と 古 い カ ー ネ ル で は 8 バ イ ト の 上 限 が 適 用 さ れ て い た )。

C ラ イ ブ ラ リ と カ ー ネ ル ABI の 違 い
GNU C ラ イ ブ ラ リ は 、 gethostname() シ ス テ ム コ ー ル を 利 用 し て い な い 。 そ の 代 わ り 、 gethostname() を ラ イ ブ ラ リ 関 数 と し て 実 装 し て お り 、 こ の 関 数 は uname(2) を 呼 び 出 し 、 uname(2) が 返 し た nodename フ ィ ー ル ド (の 最 大 len バ イ ト ) を name に コ ピ ー す る 。 コ ピ ー を 行 っ た 際 に 、 こ の 関 数 は nodename の 長 さ が len 以 上 か の 確 認 を 行 い 、 len 以 上 の 場 合 に は −1 を 返 し 、 errnoENAMETOOLONG を 設 定 す る 。 こ の 場 合 、 返 さ れ た name に は 終 端 の ヌ ル バ イ ト は 含 ま れ な い 。 バ ー ジ ョ ン 2.2 よ り 前 の glibc で は 、 nodename の 長 さ が len 以 上 の 場 合 の 扱 い が 異 な る ; len 以 上 の 場 合 に は 、 name に は 何 も コ ピ ー せ ず 、 関 数 は −1 を 返 し 、 errnoENAMETOOLONG を 設 定 す る 。

関 連 項 目

getdomainname(2), setdomainname(2), uname(2)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。