/*
who_test.c
*/
#include<stdio.h>
#include<string.h>
#include<getopt.h>
#include<time.h>
#include<stdlib.h>
#include<stdbool.h>
#include<utmp.h> //设置标志位,用来标志命令行参数
bool opt_H = false;
bool opt_q = false; /**mywho函数是调用系统数据文件的核心程序;
***它首先调用系统数据文件的接口函数,然后逐条将其数据保存下来;
***根据选项的标记为,然后输出不同的信息
***关闭系统数据文件
***/
static int mywho()
{
/*
*在系统的数据文件中,提供两个文件 utmp 和 wtmp 两个文件
* 这两个文件记录的数据结构就是utmp, 所以要声明一个utmp数据结构
*/
struct utmp *um;
char timebuf[];
int users = ; //当命令选型为 -q, 用来保存用户数量 if (opt_q)
{
/** getutent 函数用来读下一条记录,如果需要,还会打开该文件。
*返回一个指向 utmp 的指针。
*/
while ((um == getutent()))
{ if (um->ut_type != USER_PROCESS) /* 利用 utmp 结构的ut_type域,过滤出普通进程 */
{
continue;
}
printf("%-2s ", um->ut_user);
users += ;
} printf("\n# users = %d\n", users);
endutent();
return ;
} //打印各栏标题头部
if (opt_H)
{
printf("%-12s%-12s%-20.20s %s\n","NAME", "LINE", "TIME", "COMMENT");
} //此处处理的是 utmp 文件的内容
while ((um = getutent()))
{
// 利用 utmp 结构的ut_type域,过滤出普通进程
if (um->ut_type != USER_PROCESS)
{
continue;
} time_t tm;
tm = (time_t)(um->ut_tv.tv_sec);
strftime(timebuf, , "%F %R", localtime(&tm));
printf("%-12s%-12s%-20.20s (%s)\n", um->ut_user, um->ut_line, timebuf, um->ut_host);
} endutent();
return ;
} int main(int argc, char **argv)
{
int c;
int ok; while ((c = getopt(argc, argv, "Hqb")) != -)
{
switch(c)
{
case 'H':
opt_H = true;
break;
case 'q':
opt_q = true;
break;
default:
exit();
}
} if (argc != optind)
{
printf("fault command! \n");
} ok = mywho(); if (!ok)
{
return ;
}
else
{
exit();
} }

运行结果:

C语言实现linux之who功能的更多相关文章

  1. 课后练习:C语言实现Linux命令——od

    课后练习:C语言实现Linux命令--od --------CONTENTS-------- 题目详情与分析 设计思路 遇到的问题及解决 待实现的设想与思考 学习反思与感悟 附1:myod.c「1.0 ...

  2. C语言实现Linux命令——od

    C语言实现Linux命令--od 实现要求: 复习c文件处理内容 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能 main与其他分开,制作静态库和动态库 编写M ...

  3. 20155212 C语言实现linux下pwd命令的两种方法

    20155212 C语言实现linux下pwd命令的两种方法 学习pwd命令 通过man pwd命令查看 pwd [OPTION],一般不加参数 -P显示当前目录的物理路径 -L显示当前目录的连接路径 ...

  4. 20155308 加分项——C语言实现Linux的pwd命令

    20155308 加分项--C语言实现Linux的pwd命令 实现要求 学习pwd命令 什么是pwd pwd' 代表的是'Print Working Directory'(打印当前目录).如它的名字那 ...

  5. Linux安装多功能词典GoldenDict

    Linux安装多功能词典GoldenDict 活腿肠 2017.08.01 20:52* 字数 671 阅读 1555评论 0喜欢 2 Goldendict 简介 GoldenDict是一种开源的辞典 ...

  6. C语言实现Linux网络嗅探器

    C语言实现Linux网络嗅探器 0x01 实验简介 网络嗅探器是拦截通过网络接口流入和流出的数据的程序.所以,如果你正在浏览的互联网,嗅探器以数据包的形式抓到它并且显示.在本实验中,我们用 C 语言实 ...

  7. 基于LINUX的多功能聊天室

    原文:基于LINUX的多功能聊天室 基于LINUX的多功能聊天室 其实这个项目在我电脑已经躺了多时,最初写完项目规划后,我就认认真真地去实现了它,后来拿着这个项目区参加了面试,同样面试官也拿这个项目来 ...

  8. C语言与linux的故事

    声明:本文是作者读完http://www.aqee.net/proof-that-linux-is-always-number-1/这篇文章后的随想. 凌晨2点,电脑前,程序员还在不断修改着自己的代码 ...

  9. 使用c语言实现linux数据库的操作

    前言:上一篇讲解了linux下使用命令行操作数据库,这篇继续讲解怎么使用c语言实现linux数据库的操作. 使用c语言实现环境搭建:既然我们要使用c语言实现linux数据库操作,那么首先我们得先把数据 ...

随机推荐

  1. springmvc和mybatis面试题(含答案)

    Spring MVC Framework有这样一些特点: 1.它是基于组件技术的.全部的应用对象,无论控制器和视图,还是业务对象之类的都是java组件.并且和Spring提供的其他基础结构紧密集成. ...

  2. select2的简单使用

    静态下拉列表 修改 type_template.html  引入JS <!-- slect2插件--> <link rel="stylesheet" href=& ...

  3. log4j打印抛出异常时堆栈内容

    JAVA 中为快速定位,抛出异常的位置.往往需要在日志中描述. log.err("异常出错点", e); 会将出错时的堆栈信息显示出来. package com.jqyc.jase ...

  4. 2019-11-29-win10-uwp-颜色转换

    原文:2019-11-29-win10-uwp-颜色转换 title author date CreateTime categories win10 uwp 颜色转换 lindexi 2019-11- ...

  5. html提示信息框淡入淡出效果(自己的思路,如果有更好的思路,请留言)

    使用方法: 调用initMessagebox(“要显示的文字”)方法即可 <!--信息框--> <div id="messagebox"></div& ...

  6. 我是如何一步步编码完成万仓网ERP系统的(八)产品库设计 4.品牌类别

    https://www.cnblogs.com/smh188/p/11533668.html(我是如何一步步编码完成万仓网ERP系统的(一)系统架构) https://www.cnblogs.com/ ...

  7. Mac 下安装 jdk

    1.安装jdk 我们是需要java环境的- 到oracle官网下载se: Java SE Development Kit 8 Downloads https://www.oracle.com/tech ...

  8. java 手写 jvm高性能缓存

    java 手写 jvm高性能缓存,键值对存储,队列存储,存储超时设置 缓存接口 package com.ws.commons.cache; import java.util.function.Func ...

  9. webuploader-异步切片上传(暂不支持断点续传)及 下载方法!C#/.NET

    十年河东,十年河西,莫欺少年穷 学无止境,精益求精 进入正题: 关于webuploader,参考网址:https://fex.baidu.com/webuploader/: 本篇博客范例下载地址:ht ...

  10. QML MultiPointTouchArea

    MultiPointTouchArea为qml中的多点触摸提供了最基本.最重要的支持,它与TouchPoint及相关域结合,可以说是qml中多点触摸的基石. MultiPointTouchArea是不 ...