/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中

linux c 操作utmp 和 wtmp 文件接口的更多相关文章

  1. Linux 目录操作和4中文件拷贝效率测试

    /*1.用户输入任意目录名称,显示该目录下的文件列表信息,包括文件类型,文件权限,文件大小,文件名称2.拷贝用户输入的文件到当前目录下3.第二点功能,使用4种方式完成,并比较说明效率*/ /* str ...

  2. Linux 日志文件utmp、wtmp、lastlog、messages

            1.有关当前登录用户的信息记录在文件utmp中:==who命令 2.登录进入和退出纪录在文件wtmp中:==w命令 3.最后一次登录文件可以用lastlog命令察看: 4.messag ...

  3. Linux日志文件utmp、wtmp、lastlog、messages

            1.有关当前登录用户的信息记录在文件utmp中:==who命令 2.登录进入和退出纪录在文件wtmp中:==w命令 3.最后一次登录文件可以用lastlog命令察看: 4.messag ...

  4. [转帖]Linux日志文件utmp、wtmp、lastlog、messages

    Linux日志文件utmp.wtmp.lastlog.messages https://www.cnblogs.com/zhuiluoyu/p/6874255.html 1.有关当前登录用户的信息记录 ...

  5. Linux系统编程(2)——文件与IO之系统调用与文件IO操作

    系统调用是指操作系统提供给用户程序的一组"特殊"接口,用户程序可以通过这组"特殊"接口来获得得操作系统内核提供的特殊服务.在linux中用户程序不能直接访部内核 ...

  6. /sys/class/gpio 文件接口操作IO端口(s3c2440)

    http://blog.csdn.net/mirkerson/article/details/8464231 在嵌入式设备中对GPIO的操作是最基本的操作.一般的做法是写一个单独驱动程序,网上大多数的 ...

  7. linux设备驱动程序--在用户空间注册文件接口

    linux字符设备驱动程序--创建设备节点 基于4.14内核,运行在beagleBone green 在上一讲中,我们写了第一个linux设备驱动程序--hello_world,在驱动程序中,我们什么 ...

  8. LInux文件基础知识和文件目录操作(二)文件I/O操作

    1.文件I/O操作分为两部分来讲解: 第一部分是非缓冲文件操作,这种操作适合于比较小规模文件的读写和对实时性要求很高的设备的数据通信,这类操作是系统调用提供的: 第二部分是缓冲文件操作,所面向的则是大 ...

  9. 实现windows操作系统和VB下Linux虚拟操作系统相互传取文件方式总结

    在windows上执行虚拟机跑的是Linux的操作系统,怎样才干在不同的操作系统之间传递文件呢? 这是本人切身体会到的,假设你没有好的方法的话.确实非常痛苦.下面是我个人的方法总结: 方法一.很好用的 ...

随机推荐

  1. Python 41 多表查询 和 子查询

    1.查询             完整的查询语句             select [distinct] {* | 字段 | 聚合函数 | 表达式}from 表名                 ...

  2. JavaScript在表格中模拟搜索多关键词搜索和筛选

    模拟搜索需要实现以下功能: 1.用户的模糊搜索不区分大小写,需要小写字母匹配同样可以匹配到该字母的大写单词. 2.多关键词模糊搜索,假设用户关键词以空格分隔,在关键词不完整的情况下仍然可以匹配到包含该 ...

  3. CSS3 中弹性盒模型--容器的属性

    1.display : flex | inline-flex注意,设为 Flex 布局以后,子元素的float.clear和vertical-align属性 将失效. 2.flex-direction ...

  4. CSS多列布局(实例)

    前言 一列布局 二列布局 三列布局 1 一列布局 一列布局: HTML部分 <!DOCTYPE html> <html> <head> <meta chars ...

  5. css中background-origin属性的使用

    background-origin用来规定元素背景图像的相对定位位置,它有三个属性值: 1.border-box border-box表示元素背景图像相对于border区域开始定位. 代码如下: &l ...

  6. CSS的常用属性(一)

    文本属性 font-size: 16px 文字大小 font-weight: 700 文字粗细 值从100-900 (值为700看上去加粗了) 不推荐使用font-weight: bold font- ...

  7. H5网页涂鸦canvas

    最近做了个播放页面,标题和一个iframe;需要对这个iframe可以进行网页涂鸦.网页涂鸦肯定是canvas了.网上找了个差不多的,实验下来问题很多,干脆自己一步步修改,学习. 效果: 本项目没有引 ...

  8. 阿里P7架构师详解微服务链路追踪原理

    背景介绍 在微服务横行的时代,服务化思维逐渐成为了程序员的基本思维模式,但是,由于绝大部分项目只是一味地增加服务,并没有对其妥善管理,当接口出现问题时,很难从错综复杂的服务调用网络中找到问题根源,从而 ...

  9. 数据结构与算法(2)- vector概念介绍

    声明:虽然本系列博客与具体的编程语言无关.但是本文作者对c++相对比较熟悉,其次是java,所以难免会有视角上的偏差.举例也大多是和这两门语言相关. Vector的出现主要是为了解决数组的静态空间的问 ...

  10. [jzoj 5781]【NOIP提高A组模拟2018.8.8】秘密通道 (最短路)

    传送门 Description 有一副nm的地图,有nm块地,每块是下列四种中的一种: 墙:用#表示,墙有4个面,分别是前面,后面,左面,右面. 起点:用C表示,为主角的起点,是一片空地. 终点:用F ...