想找个简单的代码来看,学习代码的架构设计,就找到了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<