總結自書《unix-linux程式設計實踐教程》
1.輸入命令
顯示使用者名稱、終端名、登入時間等資訊
**2.閱讀手冊 **man who
name:命令名以及命令的簡短說明
synopsys(概要):命令格式
description:命令功能的詳細闡述以及引數選項
1.閱讀手冊
了解到與utmp檔案有關
wtmp與登入和登出有關,現在用不到
2.搜尋聯機幫助
●man -k utmp
了解到可能與utmp(5)有關
了解到與utmp.h有關
●查詢utmp.h
●檢視utmp.h,發現utmp結構體中包含幾個變數
ut_user儲存登入名
ut_line儲存裝置名
ut_time儲存時間
ut_host遠端登入計算機名
●至此我們就知道了who的工作原理就是開啟utmp檔案並讀取,然後關閉。
●需要做兩件事:
1.從檔案中讀取資料
2.將資料合理的顯示
為了完成第一件事,可以去搜尋和讀取檔案有關的主題
找到read命令並man 2 read 檢視手冊:
size_t read(int fd,void *buf,size_t count)
從fd(檔案描述符)所指的檔案傳count個引數進入buf
類似的方法找到與開啟關閉檔案有關的open與close
fd open(char *name,int how)
int close(int fd)
完整**
系統呼叫在核心中,核心和使用者來回切換消耗很多資源,加入緩衝機制可以提高程式的效率,用乙個能容納多個utmp結構的陣列作為緩衝區,編寫utmp_next函式獲取下乙個utmp結構的資料
//是unix/linux系統的基本系統資料型別的標頭檔案
#include
#include
#define nrecs 16
#define nullut ((struct utmp*)null)
#define utsize sizeof(struct utmp)
static
char utmpbuf[nrecs*utsize]
;static
int num_recs;
static
int cur_rec;
static
int fd_utmp=-1
;int
utmp_open
(char
*filename)
struct utmp*
utmp_next()
intutmp_reload()
void
utmp_close()
main.c
#include
#include
#include
#include
#include
#include
#include
void
show_info
(struct utmp *);
void
showtime
(time_t)
;int
main()
while
((utbufp=
utmp_next()
)!=(struct utmp*
)null
)//持續讀取下乙個
show_info
(utbufp)
;utmp_close()
;return0;
}void
show_info
(struct utmp *utbufp)
void
showtime
(long timeval)
Linux下 使用C語言編寫who命令
在linux 下 who命令是查詢當前登入的每個使用者。who的預設輸出包括使用者名稱 終端型別 登入日期及遠端主機。如圖 我們man一下who,在聯機幫助裡可以看到,who命令是讀取 var run utmp檔案來得到以上資訊的。我們在man一下utmp,知道utmp這個檔案,是二進位制檔案,裡面...
Linux基礎命令 who
常用工具命令 who命令是顯示目前登入系統的使用者資訊。執行who命令可得知目前有那些使用者登入系統,單獨執行who命令會列出登入帳號,使用的終端機,登入時間以及從何處登入或正在使用哪個x顯示器。who 選項 引數 選項 h或 heading 顯示各字段的標題資訊列 i或 u或 idle 顯示閒置時...
who命令的總結
who命令能做什麼 who命令用來檢視誰登入了系統 show who is logged on 每一行代表乙個巳經登入的使用者,第1列是使用者名稱,第2列是終端名,第3列是登入時間。通過whatis who或man f who直接執行命令,可以了解who的大致功能,要進一步了解who的用法,需要借助...