第十四篇:获取系统数据文件信息

前言

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

       本文将以口令文件 passwd 为例讲解读取 Linux 中系统数据文件的方法。

基本步骤

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

       2. 使用 set 函数打开文件

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

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

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

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

       

代码实现

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

 1 #include <stdio.h>
 2 #include <unistd.h>
 3 #include <pwd.h>
 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. 注意到,程序并没有指定口令文件的路径。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值