C语言中操作utmp文件的相关函数用法

C语言getutent()函数:从utmp文件中取得账号登录数据
头文件:

#include <utmp.h>

定义函数:

struct utmp *getutent(void);

函数说明:getutent()用来从utmp 文件(/var/run/utmp)中读取一项登录数据, 该数据以utmp 结构返回. 第一次调用时会取得第一位用户数据, 之后每调用一次就会返回下一项数据, 直到已无任何数据时返回NULL。

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; //进程退出状态
};

timeval 的结构定义请参考gettimeofday()。

相关常数定义如下:

  • UT_LINESIZE 32
  • UT_NAMESIZE 32
  • UT_HOSTSIZE 256

返回值:返回 utmp 结构数据, 如果返回NULL 则表示已无数据, 或有错误发生.

附加说明:getutent()在第一次调用时会打开utmp 文件, 读取数据完毕后可使用endutent()来关闭该utmp文件.

范例

#include <utmp.h>
main()
{
  struct utmp *u;
  while((u = getutent()))
  {
    if(u->ut_type == USER_PROCESS)
      printf("%d %s %s %s \n", u->ut_type, u->ut_user, u->ut_line, u->ut_host);
  }
  endutent();
}

执行
//表示有三个root 账号分别登录/dev/pts/0, /dev/pts/1, /dev/pts/2
7 root pts/0
7 root pts/1
7 root pts/2

C语言setutent()函数:从头读取utmp文件中的登录数据
头文件:

#include <utmp.h>

定义函数:

void setutent(void);

函数说明:setutent()用来将getutent()的读写地址指回utmp 文件开头。

C语言endutent()函数:关闭文件(关闭utmp文件)
头文件:

#include <utmp.h>

定义函数:

void endutent(void);

函数说明:endutent()用来关闭由getutent 所打开的utmp 文件。

范例:请参考getutent().

(0)

相关推荐

  • 在C语言中对utmp文件进行查找和写入操作的函数小结

    C语言pututline()函数:将utmp记录写入文件 头文件: #include <utmp.h> 定义函数: void pututline(struct utmp *ut); 函数说明:pututline()用来将参数ut 的utmp 结构记录到utmp 文件中. 此函数会先用getutid()来取得正确的写入位置, 如果没有找到相符的记录则会加入到utmp 文件尾. 附加说明:需要有写入/var/run/utmp 的权限 范例 #include <utmp.h> main(

  • C语言中操作utmp文件的相关函数用法

    C语言getutent()函数:从utmp文件中取得账号登录数据 头文件: #include <utmp.h> 定义函数: struct utmp *getutent(void); 函数说明:getutent()用来从utmp 文件(/var/run/utmp)中读取一项登录数据, 该数据以utmp 结构返回. 第一次调用时会取得第一位用户数据, 之后每调用一次就会返回下一项数据, 直到已无任何数据时返回NULL. utmp 结构定义如下: struct utmp { short int ut

  • C语言中操作密码文件的一些函数总结

    C语言setpwent()函数:从头读取密码文件中的账号数据 头文件: #include <pwd.h> #include <sys/types.h> 定义函数: void setpwent(void); 函数说明:setpwent()用来将getpwent()的读写地址指回密码文件开头. 范例 #include <pwd.h> #include <sys/types.h> main() { struct passwd *user; int i; for(i

  • C语言中操作进程信号的相关函数使用详解

    C语言signal()函数:设置信号处理方式 头文件: #include <signal.h> 定义函数: void (*signal(int signum, void(* handler)(int)))(int); 函数说明:signal()会依参数signum 指定的信号编号来设置该信号的处理函数. 当指定的信号到达时就会跳转到参数handler 指定的函数执行. 如果参数handler 不是函数指针, 则必须是下列两个常数之一: 1.SIG_IGN 忽略参数signum 指定的信号. 2

  • C语言中返回错误信息的相关函数用法总结

    C语言strerror()函数:返回错误原因的描述字符串 头文件: #include <string.h> 定义函数: char * strerror(int errnum); 函数说明:strerror()用来依参数errnum 的错误代码来查询其错误原因的描述字符串, 然后将该字符串指针返回. 返回值:返回描述错误原因的字符串指针. 范例: /* 显示错误代码0 至9 的错误原因描述 */ #include <string.h> main() { int i; for(i =

  • C语言中操作sqlserver数据库案例教程

    本文使用c语言来对sql server数据库进行操作,实现通过程序来对数据库进行增删改查操作. 操作系统:windows 10         实验平台:vs2012  +  sql server 2008 ODBC简介:开放数据库连接(Open Database Connectivity,ODBC),主要的功能是提供了一组用于数据库访问的编程接口,其主要的特点是,如果应用程序使用ODBC做数据源,那么这个应用程序与所使用的数据库或数据库引擎是无关的,为应用程序的跨平台和可移植奠定了基础. 创建

  • 深入了解C语言中常见的文件操作方法

    目录 1.为什么使用文件 2.什么是文件 2.1文件分类 2.2 文件名 3.文件的打开和关闭 3.1文件指针 3.2 如何使用文件指针 4.文件的读写 1.为什么使用文件 大家在写程序的时候有没有一个困惑,就是我写的程序,输入一些数据后,当我把程序关掉以后数据就消失了.这是因为程序运行时,所有的数据都存储在内存中,当程序退出后,程序中的数据自然就不存在了.等下次再运行程序时,又要重新录入数据,非常难受 ​ 如何解决这个问题呢,我们可以学习使用文件来将其保存 2.什么是文件 2.1文件分类 在程

  • C/C++语言中的头文件汇总

    stdio.h就是指"standard input&output" 意思就是说标准输入输出头文件! 所以了,用到标准输入输出函数时,就要调用这个头文件 C/C++头文件 include <assert.h> //设定插入点 include <ctype.h> //字符处理 include <errno.h> //定义错误码 include <float.h> //浮点数处理 include <fstream.h> //

  • c语言中如何修改文件中间的几个字节

    fopen的打开模式 在C语言中文件打开方式有这么几种: r 以只读方式打开文件,只能读不能写,往文件中写是没有任何效果的 r+ 可以读,也可以写,文件打开的时候,指向文件开头,可以通过seek改变读写位置 w 这种方式打开的文件句柄,只能写,如果文件存在则将长度清零,否则新建文件,这种句柄通过seek之后,seek位置之前的文件数据全部变成0x00 w+ 同w选项,只不过多了一个可读功能 a 这种方式打开的文件,可以写,但是位置在文件末尾,即使往回seek也没有用,数据还是从文件末尾开始附加

  • 一文了解Go语言中的函数与方法的用法

    目录 函数定义语法 函数定义示例 无返回值函数 单一返回值函数 多返回值函数 方法(Method)定义 方法(Method)示例 基本类型 结构体类型 函数定义语法 与大部分语言一致,Go语言中的函数定义与其他语言基本一致 func function_name(Parameter-list) { // function body... } func function_name(Parameter-list) Return-Type { // function body... } func fun

  • C语言中的各种文件读写方法小结

    前言     找工作的时候,曾经用C语言练习过一段时间的算法题目,也在几个还算出名的OJ平台有过还算靠谱的排名.之前以为C语言只限于练习一下算法,但是工作中的一个问题解决让我意识到C语言的用处还是非常广泛的.下面介绍一下,如果用C语言来操作文件保存一个字符串,和读取一个字符串.算法中往往都是printf来打印出结果,但是真实工作中往往通过文件来进行一些持久化的存储工作. C-File I/O     文件的I/O操作是每一门语言的重点,因此这里我先来介绍一下如何用C语言去进行文件的I/O操作.

随机推荐