getutent(3) Library Functions Manual getutent(3) getutent, getutid, getutline, pututline, setutent, endutent, utmpname - utmp LIBRARY Standard C library (libc, -lc) #include struct utmp *getutent(void); struct utmp *getutid(const struct utmp *ut); struct utmp *getutline(const struct utmp *ut); struct utmp *pututline(const struct utmp *ut); void setutent(void); void endutent(void); int utmpname(const char *file); New applications should use the POSIX.1-specified "utmpx" versions of these functions; see STANDARDS. utmpname() utmp utmp. utmpname() , _PATH_UTMP, . setutent() utmp. , . endutent() utmp. , . getutent() , utmp. , . utmp(5). getutid() , utmp, ut. ut->ut_type RUN_LVL, BOOT_TIME, NEW_TIME OLD_TIME, getutid() , ut_type ut->ut_type. ut->ut_type INIT_PROCESS, LOGIN_PROCESS, USER_PROCESS DEAD_PROCESS, getutid() , ut_id ut->ut_id. getutline() , utmp. , ut_type USER_PROCESS LOGIN_PROCESS, , ut_line ut->ut_line. pututline() utmp ut utmp. , , getutid() . , pututline() . getutent(), getutid() getutline() struct utmp NULL ( << >>). struct utmp . pututline() ut; NULL. utmpname() 0 -1 . On failure, these functions errno set to indicate the error. ENOMEM . ESRCH . setutent(), pututline() getut*() , open(2). /var/run/utmp , /var/log/wtmp attributes(7). +----------------------------+----------------------------------------------------------+--------------------------+ | | | | +----------------------------+----------------------------------------------------------+--------------------------+ |getutent() | | MT-Unsafe init | | | | race:utent race:utentbuf | | | | sig:ALRM timer | +----------------------------+----------------------------------------------------------+--------------------------+ |getutid(), getutline() | | MT-Unsafe init | | | | race:utent sig:ALRM | | | | timer | +----------------------------+----------------------------------------------------------+--------------------------+ |pututline() | | MT-Unsafe race:utent | | | | sig:ALRM timer | +----------------------------+----------------------------------------------------------+--------------------------+ |setutent(), endutent(), | | MT-Unsafe race:utent | |utmpname() | | | +----------------------------+----------------------------------------------------------+--------------------------+ utent race:utent , setutent(), getutent(), getutid(), getutline(), pututline(), utmpname() endutent(), . None. XPG2, SVr4. XPG2 SVID 2 pututline() void (AIX, HP-UX). HP-UX _pututline() pututline(). Linux . POSIX.1-2001 POSIX.1-2008, SUSv1, , #include struct utmpx *getutxent(void); struct utmpx *getutxid(const struct utmpx *); struct utmpx *getutxline(const struct utmpx *); struct utmpx *pututxline(const struct utmpx *); void setutxent(void); void endutxent(void); glibc <>", struct utmpx, Linux struct utmp. , glibc utmpxname(), POSIX.1. utmpx utmp , , /var/*/utmpx /var/*/wtmpx. , Linux glibc utmpx, utmp . <>, , <> (, getutxent() getutent()). glibc The above functions are not thread-safe. glibc adds reentrant versions #include int getutent_r(struct utmp *ubuf, struct utmp **ubufp); int getutid_r(struct utmp *ut, struct utmp *ubuf, struct utmp **ubufp); int getutline_r(struct utmp *ut, struct utmp *ubuf, struct utmp **ubufp); glibc (. feature_test_macros(7)): getutent_r(), getutid_r(), getutline_r(): _GNU_SOURCE || /* Since glibc 2.19: */ _DEFAULT_SOURCE || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE GNU, _r. ubuf, , . 0 *ubufp. -1. utmpx ( POSIX.1 ). utmp, , . , getpwuid(3) ttyname(3). #include #include #include #include #include #include int main(void) { struct utmp entry; system("echo before adding entry:;who"); entry.ut_type = USER_PROCESS; entry.ut_pid = getpid(); strcpy(entry.ut_line, ttyname(STDIN_FILENO) + strlen("/dev/")); /* only correct for ptys named /dev/tty[pqr][0-9a-z] */ strcpy(entry.ut_id, ttyname(STDIN_FILENO) + strlen("/dev/tty")); entry.ut_time = time(NULL); strcpy(entry.ut_user, getpwuid(getuid())->pw_name); memset(entry.ut_host, 0, UT_HOSTSIZE); entry.ut_addr = 0; setutent(); pututline(&entry); system("echo after adding entry:;who"); entry.ut_type = DEAD_PROCESS; memset(entry.ut_line, 0, UT_LINESIZE); entry.ut_time = 0; memset(entry.ut_user, 0, UT_NAMESIZE); setutent(); pututline(&entry); system("echo after removing entry:;who"); endutent(); exit(EXIT_SUCCESS); } . getutmp(3), utmp(5) Azamat Hackimov , Dmitry Bolkhovskikh , Vladislav , Yuri Kozlov ; GNU 3 , . . , , . Linux man-pages 6.06 31 2023 . getutent(3)