Linux ac命令C/C++实现(输出用户连接时间)

2023-10-07 15:10

本文主要是介绍Linux ac命令C/C++实现(输出用户连接时间),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在Linux中ac 命令显示有关用户连接到系统的时间量的统计信息。根据当前的/var/log/wtmp文件中的登录进入和退出来报告用户连接的时间。

linux ac命令

ac 命令根据当前 wtmp 文件中的登录/注销打印出连接时间报告(以小时为单位)。 总数也会被打印出来。

ac [options]

在这里插入图片描述它的主要参数有两个:

1、 -d将显示每天的连接时间。
2、 -p将显示每个用户的连接时间。

在这里插入图片描述
1、获取每日总数:

在这里插入图片描述
为每天输出输出一个总计时间,而不是在结尾输出一大的总计。
在这里插入图片描述
2、获得用户的连接时间:

为每个用户输出总计时间,并在最后追加一个所有用户的总计时间的 累计值。
在这里插入图片描述
输出的是在用户列表中包括的所有用户的连接时间的总计和值。

3、日期(含年份)显示所有用户的登录总时间:

在这里插入图片描述

在显示日期的时候输出年份。

4、根据日期显示每个用户的登录总时间:

在这里插入图片描述
统计结果单位为小时。

ac命令的登陆时间

函数 login() 获取提供的 struct utmp, ut,并将其写入 utmp 和 wtmp 文件。 utmp 文件记录了当前使用系统的人员。 wtmp 文件记录所有登录和注销。
在这里插入图片描述
ac命令的注销时间

在这里插入图片描述
logout() 函数在 utmp 文件中搜索匹配 ut_line 参数的条目。如果找到记录,则通过将 ut_name 清零来更新它和 ut_host 字段,更新 ut_tv 时间戳字段并将 ut_type(如果有这样的字段)设置为 DEAD_PROCESS。

Linux ac命令C/C++实现

int main(int argc, char **argv) 
{wtmp = "/var/log/wtmp";while (--argc > 0 && **++argv == '-')switch(*++*argv) {case 'd':byday++;continue;case 'w':if (--argc>0)wtmp = *++argv;continue;case 'p':pflag++;continue;}pcount = argc;pptr = argv;if ((wf = fopen(wtmp, "r")) == NULL) {printf("No %s\n", wtmp);return -1;;}for(;;) {if (fread((char *)&ibuf, sizeof(ibuf), 1, wf) != 1)break;fl = 0;for (i=0; i<8; i++) {c = ibuf.ut_name[i];if(isdigit(c) || isalpha(c)) {if (fl)goto skip;continue;}if (c==' ' || c=='\0') {fl++;ibuf.ut_name[i] = '\0';} elsegoto skip;}loop();skip:;}ibuf.ut_name[0] = '\0';ibuf.ut_line[0] = '~';time((time_t *)&ibuf.ut_time);loop();print();return 0;
}

编译运行:

在这里插入图片描述
在这里插入图片描述
总结

ac 命令显示有关用户连接到系统的时间量的统计信息。更多详细信息请查看man ac手册。

欢迎关注微信公众号【程序猿编码】,需要ac 命令完整源码的添加本人微信号(c17865354792)

这篇关于Linux ac命令C/C++实现(输出用户连接时间)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/158602

相关文章

MyBatis流式查询两种实现方式

《MyBatis流式查询两种实现方式》本文详解MyBatis流式查询,通过ResultHandler和Cursor实现边读边处理,避免内存溢出,ResultHandler逐条回调,Cursor支持迭代... 目录MyBATis 流式查询详解:ResultHandler 与 Cursor1. 什么是流式查询?

Springboot项目登录校验功能实现

《Springboot项目登录校验功能实现》本文介绍了Web登录校验的重要性,对比了Cookie、Session和JWT三种会话技术,分析其优缺点,并讲解了过滤器与拦截器的统一拦截方案,推荐使用JWT... 目录引言一、登录校验的基本概念二、HTTP协议的无状态性三、会话跟android踪技术1. Cook

C++归并排序代码实现示例代码

《C++归并排序代码实现示例代码》归并排序将待排序数组分成两个子数组,分别对这两个子数组进行排序,然后将排序好的子数组合并,得到排序后的数组,:本文主要介绍C++归并排序代码实现的相关资料,需要的... 目录1 算法核心思想2 代码实现3 算法时间复杂度1 算法核心思想归并排序是一种高效的排序方式,需要用

mybatis用拦截器实现字段加解密全过程

《mybatis用拦截器实现字段加解密全过程》本文通过自定义注解和MyBatis拦截器实现敏感信息加密,处理Parameter和ResultSet,确保数据库存储安全且查询结果解密可用... 目录前言拦截器的使用总结前言根据公司业务需要,灵活对客户敏感信息进行加解密,这里采用myBATis拦截器进行简单实

java实现多数据源切换方式

《java实现多数据源切换方式》本文介绍实现多数据源切换的四步方法:导入依赖、配置文件、启动类注解、使用@DS标记mapper和服务层,通过注解实现数据源动态切换,适用于实际开发中的多数据源场景... 目录一、导入依赖二、配置文件三、在启动类上配置四、在需要切换数据源的类上、方法上使用@DS注解结论一、导入

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默

SQLServer中生成雪花ID(Snowflake ID)的实现方法

《SQLServer中生成雪花ID(SnowflakeID)的实现方法》:本文主要介绍在SQLServer中生成雪花ID(SnowflakeID)的实现方法,文中通过示例代码介绍的非常详细,... 目录前言认识雪花ID雪花ID的核心特点雪花ID的结构(64位)雪花ID的优势雪花ID的局限性雪花ID的应用场景

Linux升级或者切换python版本实现方式

《Linux升级或者切换python版本实现方式》本文介绍在Ubuntu/Debian系统升级Python至3.11或更高版本的方法,通过查看版本列表并选择新版本进行全局修改,需注意自动与手动模式的选... 目录升级系统python版本 (适用于全局修改)对于Ubuntu/Debian系统安装后,验证Pyt

Python实现开根号的五种方式

《Python实现开根号的五种方式》在日常数据处理、数学计算甚至算法题中,开根号是一个高频操作,但你知道吗?Python中实现开根号的方式远不止一种!本文总结了5种常用方法,感兴趣的小伙伴跟着小编一起... 目录一、为什么需要多种开根号方式?二、5种开根号方式详解方法1:数学库 math.sqrt() ——

Linux从文件中提取特定内容的实用技巧分享

《Linux从文件中提取特定内容的实用技巧分享》在日常数据处理和配置文件管理中,我们经常需要从大型文件中提取特定内容,本文介绍的提取特定行技术正是这些高级操作的基础,以提取含有1的简单需求为例,我们可... 目录引言1、方法一:使用 grep 命令1.1 grep 命令基础1.2 命令详解1.3 高级用法2