想找個簡單的代碼來看,學習代碼的架構設計,就找到了busybox。先從最早的版本開始看。
whoami指令是擷取目前終端的使用者名。/etc/passwd檔案存儲了所有使用者名的清單。要注意的是/etc存儲的配置檔案大多是系統級的配置檔案。而whoami想要達到目的,就需要與/etc/passwd檔案打交道。
首先來看whoami.c的主體程式:
首先通過geteuid()系統調用獲得uid,然後,通過my_getpwuid(user,uid)獲得username。
再看my_getpwuid函數。
/etc/passwd中的每條記錄都有相同的格式:
name:password:uid:gid:comment:home:shell
struct passwd 結構就對應了這個記錄:
我們無法單獨得到username,所有,我們必須先得到struct passwd結構。my_getpwuid函數中的getpwuid函數就實作這個功能。
第9行while不斷讀取/etc/passwd中的條目,找到目标就return。進入到__getpwent中。
得到一個條目的首位址line_buff後,就可以parse了。過程很簡單。
找到符合uid的條目後,my_getpwuid函數得到username,輸出就可以了。
本文轉自NeilHappy 51CTO部落格,原文連結:http://blog.51cto.com/neilhappy/1133800,如需轉載請自行聯系原作者