UNIX环境高级编程——实现uid to name
来源:互联网 发布:彼丽乳木果护手霜 知乎 编辑:程序博客网 时间:2024/05/14 02:59
setpwent()用来将getpwent()的读写地址指回文件开头,即从头读取密码文件中的账号数据。
strcut passwd * getpwent(void);
getpwent()用来从密码文件(/etc/passwd)中读取一项用户数据,该用户的数据以passwd 结构返回。第一次调用时会取得第一位用户数据,之后每调用一次就会返回下一项数据,直到已无任何数据时返回NULL。
passwd 结构定义如下:
struct passwd{char * pw_name; /*用户账号*/char * pw_passwd; /*用户密码*/uid_t pw_uid; /*用户识别码*/gid_t pw_gid; /*组识别码*/char * pw_gecos; /*用户全名*/char * pw_dir; /*家目录*/char * pw_shell; /* 所使用的shell路径*/};
getpwent()在第一次调用时会打开密码文件,读取数据完毕后可使用endpwent()来关闭该密码文件。错误代码ENOMEM 内存不足,无法配置passwd结构。
endpwent()用来关闭由getpwent()所打开的密码文件。
示例代码:
#include <stdio.h>#include <stddef.h>#include <string.h>#include <pwd.h>char * getuidtoname(unsigned int uid){struct passwd *ptr;setpwent();//将getpwent()的读写地址指回文件开头while((ptr = getpwent()) != NULL)//读取一条记录放到ptr中{if(uid == ptr->pw_uid){break;}}endpwent();//用来关闭由getpwent()所打开的密码文件。return ptr->pw_name;}char * getpwname_my(uid_t uid){struct passwd *ptr;ptr = getpwuid(uid);return ptr->pw_name;} int main(){char * name;name = getuidtoname(1000);printf("name = %s\n", name); name = getpwname_my(1000);printf("name = %s\n", name);return 0;}
运行结果:
huangcheng@ubuntu:~$ ./a.outname = huangchengname = huangcheng
- UNIX环境高级编程——实现uid to name
- UNIX环境高级编程学习之第六章系统数据文件和信息-实现uid to name
- 《UNIX环境高级编程》——UNIX标准及实现
- UNIX环境高级编程——信号
- UNIX环境高级编程——线程
- UNIX环境高级编程——死锁
- UNIX环境高级编程——进程
- UNIX环境高级编程——IPC
- UNIX环境高级编程——线程
- UNIX环境高级编程——线程
- UNIX环境高级编程——信号
- Unix环境高级编程—进程关系
- <<UNIX环境高级编程>>学习总结——第二章:UNIX标准化及实现
- UNIX环境高级编程——第二章 UNIX标准及实现
- UNIX高级环境编程——UNIX基础知识笔记
- UNIX环境高级编程——UNIX基础知识
- 《UNIX环境高级编程》——UNIX基础知识
- Unix环境高级编程——第一章-UNIX基础知识
- ios上的一些数据转换
- NSdate转农历
- 三方库用到arc的解决办法
- 解决表格重用的几种方法
- ios 转屏问题
- UNIX环境高级编程——实现uid to name
- 标志位学习
- UNIX环境高级编程——创建孤儿进程
- java连接sqlServer错误数例
- VM启动框架
- PAT 1001-1010 题解
- PAT 1011-1020 题解
- PAT 1021-1030 题解
- PAT 1031-1040 题解