本文主要是介绍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++实现(输出用户连接时间)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!