Linux下 使用C語言編寫who命令

2021-06-11 12:54:58 字數 929 閱讀 5925

在linux 下

who命令是查詢當前登入的每個使用者。

who的預設輸出包括使用者名稱、終端型別、登入日期及遠端主機。

如圖:

我們man一下who,在聯機幫助裡可以看到,who命令是讀取/var/run/utmp檔案來得到以上資訊的。

我們在man一下utmp,知道utmp這個檔案,是二進位制檔案,裡面儲存的是結構體陣列,這些陣列是struct utmp結構體的。

view plain

copy to clipboard

print?

struct

utmp  ut_tv;  

/***等等***/

};  

要實現who只需要把utmp檔案的所有結構體掃瞄過一遍,把需要的資訊顯示出來就可以了。

我們需要的資訊有ut_user、ut_line、ut_tv、ut_host。

這裡要注意一點,utmp中儲存的使用者,不僅僅是已經登陸的使用者,還有系統的其他服務所需要的「使用者」,所以在顯出所有登陸使用者的時候,應該過濾掉其他使用者,只保留登陸使用者。我們可以通過ut_type來區別,登陸使用者的ut_type是user_process。另外,who所顯示的時間是有一定格式的,utmp中所儲存的時間是以秒和微妙來計算的,我們要把秒換成who中的格式即可。

下面來看**:

看看執行結果:

程式與who命令所執行的效果完全相同,達到預期效果。

Linux下 C語言編寫 TCP Server

用c寫的,做了函式的封裝,記錄在此,方便查詢 server.h ifndef server h define server h define false 1 define true 0 int server init char server port 伺服器初始化 int wait accept i...

Linux下編寫執行C語言程式

1.gcc 1.c o 1.out 1.out命名 2.gcc lm 1.c a.out使用math.h中宣告的庫函式還有一點特殊之處,gcc命令列必須加 lm選項,因為數學函式位於libm.so庫檔案中 這些庫檔案通常位於 lib目錄下 lm選項告訴編譯器,我們程式中用到的數學函式要到這個庫檔案裡...

C語言編寫 linux 下的 touch 命令

用c語言實現linux 下 touch 命令的操作 touch 建立檔案或者修改檔案或目錄的時間戳。實現效果 可新增三個引數 c no create do not create any files 不建立不存在的檔案 a change only the access time 只修改檔案的訪問時間 ...