名 前
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 を 返
し 、 errno に ENAMETOOLONG
を 設 定 す る 。
こ の 場 合 、 返
さ れ た name に は
終 端 の ヌ ル バ
イ ト は 含 ま れ
な い 。 バ ー ジ
ョ ン 2.2 よ り 前 の
glibc で は 、 nodename の
長 さ が len 以 上
の 場 合 の 扱 い
が 異 な る ; len 以
上 の 場 合 に は
、 name に は 何 も
コ ピ ー せ ず 、
関 数 は −1 を 返
し 、 errno に ENAMETOOLONG
を 設 定 す る 。
関 連 項 目
getdomainname(2), setdomainname(2), uname(2)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。