## getutent ##
從utmp 文件中取得賬號登錄數據
### 相關函數 ###
getutent,getutid,getutline,setutent,endutent,pututline,utmpname
### 表頭文件 ###
```
#include<utmp.h>
```
### 定義函數 ###
```
struct utmp *getutent(void);
```
### 函數說明 ###
getutent()用來從utmp 文件(/var/run/utmp)中讀取一項登錄數據,該數據以utmp 結構返回。第一次調用時會取得第一位用戶數據,之后每調用一次就會返回下一項數據,直到已無任何數據時返回NULL。
utmp結構定義如下
```
struct utmp
{
short int ut_type; /*登錄類型*/
pid_t ut_pid; /*login進程的pid*/
char ut_line[UT_LINESIZE];/*登錄裝置名,省略了“/dev/”*/
char ut_id[4]; /* Inittab ID*/
char ut_user[UT_NAMESIZE];/*登錄賬號*/
char ut_host[UT_HOSTSIZE];/*登錄賬號的遠程主機名稱*/
struxt exit_status ut_exit;/* 當類型為DEAD_PROCESS時進程的結
束狀態*/
long int ut_session; /*Sessioc ID*/
struct timeval ut_tv; /*時間記錄*/
int32_t ut_addr_v6[4]; /*遠程主機的網絡地址*/
char __unused[20]; /* 保留未使用*/
};
```
ut_type有以下幾種類型:
EMPTY 此為空的記錄。
RUN_LVL 記錄系統run-level的改變
BOOT_TIME 記錄系統開機時間
NEW_TIME 記錄系統時間改變后的時間
OLD_TINE 記錄當改變系統時間時的時間。
INIT_PROCESS 記錄一個由init衍生出來的進程。
LOGIN_PROCESS 記錄login進程。
USER_PROCESS 記錄一般進程。
DEAD_PROCESS 記錄一結束的進程。
ACCOUNTING 目前尚未使用。
exit_status結構定義
```
struct exit_status
{
short int e_termination; /*進程結束狀態*/
short int e_exit; /*進程退出狀態*/
};
```
timeval的結構定義請參考gettimeofday()。
相關常數定義如下:
UT_LINESIZE 32
UT_NAMESIZE 32
UT_HOSTSIZE 256
### 返回值 ###
返回utmp 結構數據,如果返回NULL 則表示已無數據,或有錯誤發生。
### 附加說明 ###
getutent()在第一次調用時會打開utmp 文件,讀取數據完畢后可使用endutent()來關閉該utmp文件。
### 范例 ###
```
#include<utmp.h>
main()
{
struct utmp *u;
while((u=getutent())){
if(u->ut_type = = USER_PROCESS)
printf(“%d %s %s %s \n”,u->ut_type,u->ut_user,u->ut_line,u->ut_host);
}
endutent();
}
```
### 執行 ###
```
/* 表示有三個root賬號分別登錄/dev/pts/0,/dev/pts/1,/dev/pts/2 */
7 root pts/0
7 root pts/1
7 root pts/2
```
- 字符測試篇
- isalnum
- isalpha
- isascii
- iscntrl
- isdigit
- isgraphis
- islower
- isprint
- isspace
- ispunct
- isupper
- isxdigit
- 字符串轉換篇
- atof
- atoi
- atol
- gcvt
- strtod
- strtol
- strtoul
- toascii
- tolower
- toupper
- 內存控制篇
- calloc
- free
- getpagesize
- malloc
- mmap
- munmap
- 日期時間篇
- asctime
- ctime
- gettimeofday
- gmtime
- localtime
- mktime
- settimeofday
- time
- 內存及字符串操作篇
- bcmp
- bcopy
- bzero
- index
- memccpy
- memchr
- memcmp
- memcpy
- memmove
- memset
- rindex
- strcasecmp
- strcat
- strchr
- strcmp
- strcoll
- strcpy
- strcspn
- strdup
- strlen
- strncasecmp
- strncat
- strncpy
- strpbrk
- strrchr
- strspn
- strstr
- strtok
- 常用數學函數篇
- abs
- acos
- asin
- atan
- atan2
- ceil
- cos
- cosh
- exp
- frexp
- ldexp
- log
- log10
- pow
- sin
- sinh
- sqrt
- tan
- tanh
- 用戶組篇
- endgrent
- endpwent
- endutent
- fgetgrent
- fgetpwent
- getegid
- geteuid
- getgid
- getgrent
- getgrgid
- getgrnam
- getgroups
- getpw
- getpwent
- getpwnam
- getpwuid
- getuid
- getutent
- getutid
- getutline
- initgroups
- pututline
- seteuid
- setfsgid
- setfsuid
- setgid
- setgrent
- setgroups
- setpwent
- setregid
- setreuid
- setuid
- setutent
- utmpname
- 數據結構及算法篇
- crypt
- bsearch
- lfind
- lsearch
- qsort
- rand
- srand
- 文件操作篇
- close
- creat
- dup
- dup2
- fcntl
- flock
- fsync
- lseek
- mkstemp
- open
- read
- sync
- write
- 文件內容操作篇
- clearerr
- fclose
- fdopen
- feof
- fflush
- fgetc
- fgets
- fileno
- fopen
- fputc
- fputs
- fread
- freopen
- fseek
- ftell
- fwrite
- getc
- getchar
- gets
- mktemp
- putc
- putchar
- rewind
- setbuf
- setbuffer
- setlinebuf
- setvbuf
- ungetc
- 進程操作篇
- atexit
- execl
- execlp
- execv
- execve
- execvp
- exit
- _exit
- vfork
- getpgid
- getpgrp
- getpid
- getppid
- getpriority
- nice
- on_exit
- setpgid
- setpgrp
- setpriority
- system
- wait
- waitpid
- 格式化輸入輸出篇
- fprintf
- fscanf
- printf
- scanf
- sprintf
- sscanf
- vfprintf
- vfscanf
- vprintf
- vscanf
- vsprintf
- vsscanf
- 文件權限控制篇
- access
- alphasort
- chdir
- chmod
- chown
- chroot
- closedir
- fchdir
- fchmod
- fchown
- fstat
- ftruncate
- getcwd
- link
- lstat
- opendir
- readdir
- readlink
- remove
- rename
- rewinddir
- seekdir
- stat
- symlink
- telldir
- truncate
- umask
- unlink
- utime
- utimes
- 信號處理篇
- alarm
- kill
- pause
- sigaction
- sigaddset
- sigdelset
- sigemptyset
- sigfillset
- sigismember
- signal
- sigpending
- sigprocmask
- sleep
- ferror
- perror
- strerror
- mkfifo
- pclose
- pipe
- popen
- 接口處理篇
- accept
- bind
- connect
- endprotoent
- endservent
- getsockopt
- htonl
- htons
- inet_addr
- inet_aton
- inet_ntoa
- listen
- ntohl
- ntohs
- recv
- recvfrom
- recvmsg
- send
- sendmsg
- sendto
- setprotoent
- setservent
- setsockopt
- shutdown
- socket
- 環境變量篇
- getenv
- putenv
- setenv
- 終端控制篇
- getopt
- isatty
- select
- ttyname