博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
获取系统数据文件信息
阅读量:5289 次
发布时间:2019-06-14

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

前言

  在 Linux 中,系统数据文件大都不能直接用编辑的方式读取。如此设计一方面是从安全性考虑,另一方面则是从文件检索效率考虑。本文将以口令文件 passwd 为例讲解读取 Linux 中系统数据文件的方法。

基本步骤

  1. 包含读写该系统数据文件的专用头文件 ( 如读写口令文件要包含 pwd.h 组文件则是 grp.h )

  2. 使用 set 函数打开文件

  3. 使用 get 函数读取下一个记录

  4. 使用 end 函数关闭此文件

  另,如果数据文件支持某种形式的关键字搜索,则会提供搜索具有指定关键字记录的例程。如口令文件提供了 getpwnam 函数寻找具有指定用户名的记录;getpwuid 函数寻找具有指定用户ID的记录。

  几个主要系统数据文件的例程信息可参考下表:

  

代码实现

  下程序打印口令文件中的所有用户名:

1 #include 
2 #include
3 #include
4 5 int main (void) { 6 // 打开口令文件 7 setpwent(); 8 9 // 设立指向口令结构体的指针10 struct passwd *p = NULL;11 12 // 遍历口令文件13 while (p = getpwent()) {14 printf ("%s, ", p->pw_name);15 }16 printf("\n");17 18 // 关闭口令文件19 endpwent();20 21 return 0;22 }

  附 passwd 结构体

1 struct passwd 2 { 3     char * pw_name; /* Username, POSIX.1 */ 4     char * pw_passwd; /* Password */ 5     __uid_t pw_uid; /* User ID, POSIX.1 */ 6     __gid_t pw_gid; /* Group ID, POSIX.1 */ 7     char * pw_gecos; /* Real Name or Comment field */ 8     char * pw_dir; /* Home directory, POSIX.1 */ 9     char * pw_shell; /* Shell Program, POSIX.1 */10     char *pw_class;11     time_t pw_change;12     time_t pw_expire;13 };

运行测试

  

小结

  1. 除了顺序遍历的方法读取系统数据文件( 如本文程序 ),还可以根据某些字段信息检索文件。

  2. 注意到,程序并没有指定口令文件的路径。

 

转载于:https://www.cnblogs.com/scut-fm/p/3668072.html

你可能感兴趣的文章
清理脚本
查看>>
在普通类中调用service
查看>>
个人技能总结10:微信开发
查看>>
Springboot整合pagehelper分页
查看>>
迅为7寸安卓系统触控一体机提供操作例程【目录】
查看>>
Ice异步程序设计----AMI,AMD
查看>>
windows下安装opencv
查看>>
JavaScript-jQuery报TypeError $(...) is null错误(jQuery失效)解决办法
查看>>
open live writer
查看>>
C语言栈的实现
查看>>
代码为什么需要重构
查看>>
SAP销售模块塑工常见问题和解决方案(自己收藏)
查看>>
事后诸葛亮博客
查看>>
TC SRM 593 DIV1 250
查看>>
SRM 628 DIV2
查看>>
Round Numbers
查看>>
完成评论功能
查看>>
2018-2019-2 20165314『网络对抗技术』Exp5:MSF基础应用
查看>>
Varish 缓存
查看>>
Jbpm5.4实例在JBoss中运行、及H2数据库迁移oracle数据库
查看>>