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

本文深入分析busybox源码中的whoami命令,通过geteuid()获取uid,结合my_getpwuid函数从/etc/passwd文件中查找用户名。文章详细解释了/etc/passwd文件格式和struct passwd结构,以及解析过程。
摘要由CSDN通过智能技术生成

     想找个简单的代码来看,学习代码的架构设计,就找到了busybox。先从最早的版本开始看。

     whoami命令是获取当前终端的用户名。/etc/passwd文件存储了所有用户名的清单。要注意的是/etc存储的配置文件大多是系统级的配置文件。而whoami想要达到目的,就需要与/etc/passwd文件打交道。

     首先来看whoami.c的主体程序:

复制代码
 1 extern int whoami_main(int argc, char **argv)
 2 {
 3     char user[9];
 4     uid_t uid = geteuid();
 5 
 6     if (argc > 1)
 7         show_usage();
 8 
 9     my_getpwuid(user, uid);
10     if (*user) {
11         puts(user);
12         return EXIT_SUCCESS;
13     }
14     error_msg_and_die("cannot find username for UID %u", (unsigned) uid);
15 }
复制代码

      首先通过geteuid()系统调用获得uid,然后,通过my_getpwuid(user,uid)获得username。

      再看my_getpwuid函数。

复制代码
 1 void my_getpwuid(char *name, long uid)
 2 {
 3<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值