/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. PCB MongoDB 数据库 Collection集合导出与导入

    由于一直以来用微软可视化图形界面习惯了,而MongoDB是命令式操作,而用系统自带CMD操作不方便, 这里介绍一款CMD的替代品,大小100多M. Cmder工具下载  https://github. ...

  2. Django day05 视图层之 (HttpRequest) \ (HttpResponse) \ (JsonResponse) 对象

    一:视图层之HttpRequest对象 # 前台Post传过来的数据,包装到POST字典中 # request.POST # 前台浏览器窗口里携带的数据,包装到GET字典中 # request.GET ...

  3. Python 33(2)进程理论

    一:什么是进程         进程指的是一个正在进行 / 运行的程序,进程是用来描述程序执行过程的虚拟概念 进程vs程序 程序:一堆代码 进程:程序的执行的过程 进程的概念起源于操作系统,进程是操作 ...

  4. El表达式日期处理

    第1步:引入指令  <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt " %&g ...

  5. EasyUI DataGrid组织事件冒泡

    在事件内部需要阻止的地方添加如下代码 ]; 解释: arguments.callee是获得我自定义的事件处理方法OnSelected的方法体. .caller是获得调用OnSelected的上层方法( ...

  6. 使用protobuf传递网络消息

    1.获取protobuf及相关依赖 新建install_protobuf.bat脚本,粘贴以下代码 ::参考文章 https://github.com/google/protobuf/blob/mas ...

  7. 管理mysql数据严格模式,和安全模式处理

    最近使用mysql数据库高一点的版本遇到了,插入和修改等语句失败情况.语句没有错误,但是workbench提示 Field 'id' doesn't have a default value.原因是 ...

  8. 远程连接Oracle设置

    1:打开net manager:开始->程序->oracle->配置和移植工具->Net Manager 2:添加服务器名->名子自定义,一般根据项目自定义,自己知道就行 ...

  9. 安装完MongoDB后尝试mongod -dbpath命令为什么会一直卡在连接端口?

    1.现象如下 Linux Windows 2.原因 其实,这不是卡住了,而是告诉我们.数据库已经启动,而且这个东东还不能关掉,关掉意味着数据库也关了.一开始我也是傻逼逼的在那等了一天,哎.... 3. ...

  10. DNN:逻辑回归与 SoftMax 回归方法

    UFLDL Tutorial 翻译系列:http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial 第四章:SoftMax回归 简介: ...