C语言编程中从密码文件获取数据的函数总结
C语言getpw()函数:取得指定用户的密码文件数据
头文件:
#include<pwd.h>#include<sys/types.h>
定义函数:
intgetpw(uid_tuid,char*buf);
函数说明:getpw()会从/etc/passwd中查找符合参数uid所指定的用户账号数据,找不到相关数据就返回-1。
所返回的buf字符串格式如下:
账号:密码:用户识别码(uid):组识别码(gid):全名:根目录:shell
返回值:返回0表示成功,有错误发生时返回-1.
附加说明
1.getpw()会有潜在的安全性问题,请尽量使用别的函数取代。
2.使用shadow的系统已把用户密码抽出/etc/passwd,因此使用getpw()取得的密码将为"x"。
范例
#include<pwd.h> #include<sys/types.h> main() { charbuffer[80]; getpw(0,buffer); printf("%s\n",buffer); }
执行:
root:x:0:0:root:/root:/bin/bash
C语言getpwnam()函数:从密码文件中取得指定账号的数据
头文件:
#include<pwd.h>#include<sys/types.h>
定义函数:
structpasswd*getpwnam(constchar*name);
函数说明:getpwnam()用来逐一搜索参数name指定的账号名称,找到时便将该用户的数据以passwd结构返回。passwd结构请参考getpwent()。
返回值:返回passwd结构数据,如果返回NULL则表示已无数据,或有错误发生.
范例
/*取得root账号的识别码和根目录*/ #include<pwd.h> #include<sys/types.h> main() { structpasswd*user; user=getpwnam("root"); printf("name:%s\n",user->pw_name); printf("uid:%d\n",user->pw_uid); printf("home:%s\n",user->pw_dir); }
执行:
name:root uid:0 home:/root
C语言getpwuid()函数:从密码文件中取得指定uid的数据
头文件:
#include<pwd.h>#include<sys/types.h>
定义函数:
structpasswd*getpwuid(uid_tuid);
函数说明:getpwuid()用来逐一搜索参数uid指定的用户识别码,找到时便将该用户的数据以结构返回结构请参考将该用户的数据以passwd结构返回.passwd结构请参考getpwent()。
返回值:返回passwd结构数据,如果返回NULL则表示已无数据,或者有错误发生.
范例
#include<pwd.h> #include<sys/types.h> main() { structpasswd*user; user=getpwuid(6); printf("name:%s\n",user->pw_name); printf("uid:%d\n",user->pw_uid); printf("home:%s\n",user->pw_dir); }
执行:
name:shutdown uid:6 home:/sbin