博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UNIX环境高级编程——实现uid to name
阅读量:4475 次
发布时间:2019-06-08

本文共 1244 字,大约阅读时间需要 4 分钟。

       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 
#include
#include
#include
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

转载于:https://www.cnblogs.com/wangfengju/p/6172499.html

你可能感兴趣的文章
TensorFlow在Windows上的CPU版本和GPU版本的安装指南(亲测有效)
查看>>
蒟蒻吃药计划-治疗系列 #round5 采药+数字组合代码存放
查看>>
Git
查看>>
ImageSwitcher 右向左滑动的实现方式
查看>>
数学之美读书笔记一信息的度量和作用
查看>>
《荣枯鉴》示伪卷八
查看>>
NLP 第10章 基于深度学习的NLP 算法
查看>>
win7下出现'telnet' 不是内部或外部命令,也不是可运行的程序或批处理文件的解决方法...
查看>>
Maven 依赖范围(转)
查看>>
Google Chrome中的高性能网络(转)
查看>>
[置顶] 数据结构之 二叉树的构造与遍历(先序,中序,后序,层次)
查看>>
Tomcat在处理GET和POST请求时产生的乱码问题
查看>>
XSS 攻击原理及防护
查看>>
操作符重载
查看>>
Docker 安装及问题处理
查看>>
JavaScript中的call 和apply的用途以及区别
查看>>
HashMap完全解读
查看>>
匿名内部类
查看>>
man命令重定向后有^H乱码问题
查看>>
自定义popupwindow(解决位置控制困惑)
查看>>