除了著名的init程序以外,所有的linux程序都是由其他程序或者用户启动的。
用户通常是在一个响应他们的命令的shell中启动程序。
程序能够通过检查环境变量和系统时钟来在很大程度上了解它所处的使用者的相关信息。
系统文件 /etc/passwd 包含一个用户账号数据库。它由行组成,每行对应一个用户,包括用户名,加密口令,UID、GID、全名、家目录和默认shell
系统文件/etc/shadow 现代的类UNIX系统使用这个文件来保存加密口令信息。
----------------------------------
1、uid_t getuid(void);返回程序关联的UID。它通常是启动程序的UID
2、char* getlogin(void);返回与当前用户关联登录名。
3、标准而又有效的获取用户信息的编程接口:
#include <sys/types.h>
#include <pwd.h>
struct passwd* getpwuid(uid_t);
struct passwd* getpwnam(const char* name);
使用:
struct passwd* pwd_uid= getpwuid( getuid() );
struct passwd* pwd_name = getpwnam( getlogin() );
4、如果要扫描密码文件中的所有信息,可以使用
getpwent,它的作用是依次取出文件数据项。
相关函数:
void endpwent(void);//终止处理过程
struct passwd* getpwent(void);//依次返回每个用户的信息数据项,当达到文件尾时,它返回一个空指针
void setpwent(void);//重置读指针到密码文件的开始位置。
程序示例:
struct passwd* pwd = NULL;
while((pwd = getpwent()) != NULL)
{
printf("user's name:%s\n", pwd->pw_name);
}