如何編寫who命令

2021-10-05 15:27:34 字數 3281 閱讀 8275

總結自書《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的用法,需要借助...