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

 更新时间:2015年08月29日 10:55:08   投稿:goldensun  
这篇文章主要介绍了在C语言中对utmp文件进行查找和写入操作的函数小结,包括pututline()函数和getutline()函数以及getutid()函数,需要的朋友可以参考下

C语言pututline()函数:将utmp记录写入文件
头文件:

#include <utmp.h>

定义函数:

void pututline(struct utmp *ut);

函数说明:pututline()用来将参数ut 的utmp 结构记录到utmp 文件中. 此函数会先用getutid()来取得正确的写入位置, 如果没有找到相符的记录则会加入到utmp 文件尾.
附加说明:需要有写入/var/run/utmp 的权限

范例

#include <utmp.h>
main()
{
  struct utmp ut;
  ut.ut_type = USER_PROCESS;
  ut.ut_pid = getpid();
  strcpy(ut.ut_user, "kids");
  strcpy(ut.ut_line, "pts/1");
  strcpy(ut.ut_host, "www.gnu.org");
  pututline(&ut);
}

执行:

//执行范例后用指令who -l 观察
root pts/0 dec9 19:20
kids pts/1 dec12 10:31(www.gnu.org)
root pts/2 dec12 13:33

C语言getutline()函数:文件查找函数(从utmp文件中查找特定的)
头文件:

#include <utmp.h>

定义函数:

struct utmp * getutline(struct utmp *ut);

函数说明:getutline()用来从目前utmp 文件的读写位置逐一往后搜索ut_type 为USER_PROCESS 或LOGIN_PROCESS 的记录, 而且ut_line 和ut->ut_line 相符. 找到相符的记录便将该数据以utmp 结构返回。

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

范例

#include <utmp.h>
main()
{
  struct utmp ut, *u;
  strcpy(ut.ut_line, "pts/1");
  while((u = getutline(&ut)))
  {
    printf("%d %s %s %s \n", u->ut_type, u->ut_user, u->ut_line, u->ut_host);
  }
}

执行:

7 root pts/1

C语言getutid()函数:从utmp文件中查找特定的记录
头文件:

#include <utmp.h>

定义函数:

strcut utmp *getutid(strcut utmp *ut);

函数说明:
getutid()用来从目前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相符的记录. 找到相符的记录便将该数据以utmp 结构返回.

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

范例

#include <utmp.h>
main()
{
  struct utmp ut, *u;
  ut.ut_type=RUN_LVL;
  while((u = getutid(&ut)))
  {
    printf("%d %s %s %s\n", u->ut_type, u->ut_user, u->ut_line, u->ut_host);
  }
}

执行:

1 runlevel -

相关文章

  • C++结构体与类的区别详情

    C++结构体与类的区别详情

    这篇文章主要介绍了C++结构体与类的区别,C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。下面我们一起进入文章俩姐具体内容,需要的朋友也可以参考一下
    2021-11-11
  • C语言数据结构之栈和队列的实现及应用

    C语言数据结构之栈和队列的实现及应用

    栈和队列是一种数据结构,只规定了性质,并没有规定实现方式。本文将以顺序结构实现栈,链表方式实现队列,感兴趣的小伙伴快跟随小编一起学习一下吧
    2022-08-08
  • C语言代码链表实现贪吃蛇游戏

    C语言代码链表实现贪吃蛇游戏

    这篇文章主要为大家详细介绍了C语言链表实现贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01
  • C++中的string类(C++字符串)入门完全攻略

    C++中的string类(C++字符串)入门完全攻略

    这篇文章主要给大家介绍了关于C++中string类(C++字符串)入门的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-11-11
  • C++实现快速排序(Quicksort)算法

    C++实现快速排序(Quicksort)算法

    这篇文章主要为大家详细介绍了C++实现快速排序(Quicksort)算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • 详解C++中typedef 和 #define 的区别

    详解C++中typedef 和 #define 的区别

    这篇文章主要介绍了C++中typedef 与 #define 的区别,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • 基于C语言实现五子棋游戏

    基于C语言实现五子棋游戏

    这篇文章主要为大家详细介绍了基于C语言实现五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • C/C++ Qt 自定义Dialog对话框组件应用案例详解

    C/C++ Qt 自定义Dialog对话框组件应用案例详解

    有时候我们需要一次性修改多个数据,使用默认的模态对话框似乎不太够用,此时我们需要自己创建一个自定义对话框。这篇文章主要介绍了Qt自定义Dialog对话框组件的应用,感兴趣的同学可以学习一下
    2021-11-11
  • 详解C++中存储类的使用

    详解C++中存储类的使用

    存储类定义 C++ 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。auto、register、static、extern和mutable是C++程序中常用的存储类,本文主要介绍了它们的使用方法,需要的可以参考一下
    2022-12-12
  • C++浅析内联函数的使用

    C++浅析内联函数的使用

    为了消除函数调用的时空开销,C++ 提供一种提高效率的方法,即在编译时将函数调用处用函数体替换,类似于C语言中的宏展开。这种在函数调用处直接嵌入函数体的函数称为内联函数(Inline Function),又称内嵌函数或者内置函数
    2022-05-05

最新评论