天天看點

busybox源碼剖析(1)---whoami.c

  想找個簡單的代碼來看,學習代碼的架構設計,就找到了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,如需轉載請自行聯系原作者