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


    前言

           在 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("
    ");
    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. 注意到,程序并没有指定口令文件的路径。

  • 相关阅读:
    实验一、拿下WordPress网站
    特殊问题讨论
    BGP基础配置
    《快活帮》第七次作业:团队项目设计完善&编码
    《快活帮》第六次作业:团队项目系统设计改进与详细设计
    《快活帮》第五次作业:项目需求分析改进与系统设计
    《快活帮》第四次作业:项目需求调研与分析
    《快活帮》第三次作业:团队项目的原型设计
    《快活帮》第二次作业:团队项目选题报告
    《快活帮》第一次作业:团队亮相
  • 原文地址:https://www.cnblogs.com/muchen/p/6354500.html
Copyright © 2020-2023  润新知