login, logout - utmp と wtmp
エントリーを書き込む
#include <utmp.h>
void login(const struct utmp *ut);
int logout(const char *ut_line);
-lutil でリンクする。
utmp
ファイルは現在システムを使用しているユーザーを記録する。
wtmp
ファイルはすべてのログインとログアウトを記録する。
utmp(5)
を参照すること。
関数
login() は与えられた
struct utmp ut を utmp と wtmp
ファイルの両方に書き込む。
関数
logout() は utmp
ファイルにあるエントリーをクリアする。
より正確には、
login()
は引数
ut
構造体をとり、(もし存在するならば)
フィールド
ut->ut_type を
USER_PROCESS
という値にし、(もし存在するならば)
フィールド
ut->ut_pid
を呼び出し元プロセスのプロセス
ID の値にする。
次にフィールド
ut->ut_line
の値を設定しようとする。
この関数は、標準入力・標準出力・標準エラー出力の中から端末である最初のものをとり、対応するパス名から先頭の
/dev/ を引いたものを
このフィールドに格納して、この構造体を
utmp
ファイルに書き込む。
一方、端末名が見つからない場合は、このフィールドは
"???" とされて、
この構造体は utmp
ファイルに書き込まれない。
その後にこの構造体は
wtmp
ファイルに書き込まれる。
logout() 関数は utmp
ファイルから
ut_line
引数にマッチするエントリーを探す。
レコードが見つかった場合、
ut_name と
ut_host
フィールドをクリアして、
ut_tv
タイムスタンプフィールドを更新し、
(もし存在するならば)
ut_type フィールドを
DEAD_PROCESS に更新する。
エントリーをデータベースに書き込むのに成功した場合、
logout() 関数は 1 を返す。
またエラーが起こった場合、0
を返す。
- /var/run/utmp
- ユーザーアカウントデータベース。
<paths.h> における _PATH_UTMP
で設定されている。
- /var/log/wtmp
- ユーザーアカウントログファイル。
<paths.h> における _PATH_WTMP
で設定されている。
この節で使用されている用語の説明については、
attributes(7) を参照。
インターフェース |
属性 |
値 |
login(), logout() |
Thread safety |
MT-Unsafe race:utent sig:ALRM timer |
In the above table,
utent in
race:utent signifies that if any of
the functions
setutent(3),
getutent(3), or
endutent(3)
are used in parallel in different threads of a program, then data races could
occur.
login() and
logout() calls those functions, so we use
race:utent to remind users.
POSIX.1 にはない。 BSD
系に存在する。
struct utmp のメンバ
ut_user
は、BSD では
ut_name
という名前である点に注意すること。
そのため
ut_name は
<utmp.h>
において
ut_user
のエイリアスとして定義されている。
getutent(3),
utmp(5)
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。