C語言getutent()函數:從utmp文件中取得賬號登錄數據
頭文件:
#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 有以下幾種類型:
exit_status 結構定義:
struct exit_status{ short int e_termination; //進程結束狀態 short int e_exit; //進程退出狀態};
timeval 的結構定義請參考gettimeofday()。
相關常數定義如下:
返回值:返回 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
C語言setutent()函數:從頭讀取utmp文件中的登錄數據
頭文件:
#include <utmp.h>
定義函數:
void setutent(void);
函數說明:setutent()用來將getutent()的讀寫地址指回utmp 文件開頭。
C語言endutent()函數:關閉文件(關閉utmp文件)
頭文件:
#include <utmp.h>
定義函數:
void endutent(void);
函數說明:endutent()用來關閉由getutent 所打開的utmp 文件。
范例:請參考getutent().
新聞熱點
疑難解答
圖片精選