zoukankan      html  css  js  c++  java
  • linux c 操作utmp 和 wtmp 文件接口

    /var/run/utmp 保存当前在本系统中的用户信息
    /var/log/wtmp 保存登陆过本系统的用户信息

    他们保存的信息是基于结构体 struct utmp 的(/usr/include/bits/utmp.h)

    utmp 结构体定义例如以下:
    struct utmp
    {
        short int ut_type; //登录类型
        pid_t ut_pid; //login 进程的pid
        char ut_line[UT_LINESIZE]; //登录装置名, 省略了"/dev/"
        char ut_id[4]; //Inittab ID
        char ut_user[UT_NAMESIZE]; //登录账号
        char ut_host[UT_HOSTSIZE]; //登录账号的远程主机名称
        struxt exit_status ut_exit; //当类型为DEAD_PROCESS 时进程的结束状态
        long int ut_session; //Sessioc ID
        struct timeval ut_tv; //时间记录
        int32_t ut_addr_v6[4]; //远程主机的网络地址
        char __unused[20]; //保留未使用
    };
    
    ut_type 有下面几种类型:
    EMPTY:此为空的记录.
    RUN_LVL:记录系统run-level 的改变
    BOOT_TIME:记录系统开机时间
    NEW_TIME:记录系统时间改变后的时间
    OLD_TINE:记录当改变系统时间时的时间.
    INIT_PROCESS:记录一个由init 衍生出来的进程.
    LOGIN_PROCESS:记录 login 进程.
    USER_PROCESS:记录一般进程.
    DEAD_PROCESS:记录一结束的进程.
    ACCOUNTING:眼下尚未使用.
    
    exit_status 结构定义:
    struct exit_status
    {
        short int e_termination; //进程结束状态
        short int e_exit; //进程退出状态
    };
    
    struct timeval 结构定义:
    struct timeval{
        time_t      tv_sec;     /* 秒数 */
        suseconds_t tv_usec;    /* 微秒 */
    };
    
    相关常数定义例如以下:
    UT_LINESIZE 32
    UT_NAMESIZE 32
    UT_HOSTSIZE 256
    

    读取和改动这些文件的函数例如以下:

    #include <utmp.h>
    struct utmp *getutent(void);  
    //从 utmp 文件里,每次读取一个 struct tump 结构体。读完文件或者失败返回NULL
    //附加说明:getutent()在第一次调用时会打开utmp 文件, 读取数据完成后可使用endutent()来关闭该utmp文件
    
    
    struct utmp *getutid(struct utmp *ut); 
    //从 utmp 文件里的读写位置逐一往后搜索參数 ut 指定的记录
    //1、假设ut->ut_type 为RUN_LVL, BOOT_TIME, NEW_TIME, OLD_TIME 当中之中的一个则查找与ut->ut_type 相符的记录;
    //2、若ut->ut_type为INIT_PROCESS, LOGIN_PROCESS, USER_PROCESS 或DEAD_PROCESS 当中之中的一个, 则查找与ut->ut_id相符的记录. 
    
    struct utmp *getutline(struct utmp *ut);
    //从utmp 文件的读写位置逐一往后搜索ut_type 为USER_PROCESS 或LOGIN_PROCESS 的记录, 并且ut_line 和ut->ut_line 相符.
    
    struct utmp *pututline(struct utmp *ut);
    //将一个struct utmp结构体写进文件utmp中
    
    void setutent(void);
    //打开文件utmp,并且将文件指针指向文件的最開始。
    
    void endutent(void);
    //关闭文件utmp
    
    int utmpname(const char *file);
    //设定utmp文件所在的路径,默认的路径为宏 _PATH_UTMP,该宏定义在/usr/include/paths.h中
  • 相关阅读:
    tuple 元组及字典dict
    day 49 css属性补充浮动 属性定位 抽屉作业
    day48 选择器(基本、层级 、属性) css属性
    day47 列表 表单 css初识
    day 46 http和html
    day 45索引
    day 44 练习题讲解 多表查询
    day 40 多表查询 子查询
    day39 表之间的关联关系、 补充 表操作总结 where 、group by、
    day38 数据类型 约束条件
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7249797.html
Copyright © 2011-2022 走看看