/*
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. springboot 获取到的inputStream为空的问题

    springboot在接收http请求的时候读取的request的inputStream,造成我们想自己读取inputStream的时候发现inputStream已经无法读取了. 为了读取inputS ...

  2. 被synchronized修饰的方法调用了没有被synchronized修饰的方法,是否是线程安全

    1 被synchronized修饰的方法调用了没有被synchronized修饰的方法,是否线程安全? /** * (1)被synchronized修饰的方法调用了没有被synchronized修饰的 ...

  3. SQlServer 变量定义 赋值

    declare @id int declare @name char(10) ;注意:char(10)为10位,要是位数小了会让数据出错 set @id=1 select @id=1 select @ ...

  4. python 多进程并发demo

    outline 下午需要简单处理一份数据,就直接随手写脚本处理了,但发现效率太低,速度太慢,就改成多进程了: 程序涉及计算.文件读写,鉴于计算内容挺多的,就用多进程了(计算密集). 代码 import ...

  5. java实现二叉树常见操作

    package com.xk.test.struct.newp; import java.util.ArrayList; import java.util.LinkedList; import jav ...

  6. MyBatis启动之XMLConfigBuilder解析配置文件(二)

    前言 XMLConfigBuilder 是BaseBuilder(解析中会涉及到讲解)的其中一个子类,它的作用是把MyBatis的XML及相关配置解析出来,然后保存到Configuration中.本文 ...

  7. 【转】Why BIOS loads MBR into 0x7C00 in x86 ?

    最近在读Linux的grub的stage1中看到“BIOS执行INT 0x19,加载MBR内容至0x7c00,然后跳转执行”,为什么一定是0x7c00这个地址. 作者刚好在下面推荐了这篇文件,刚好顺手 ...

  8. 面试题:java中String为什么要设置成final

    1.不可改变---执行效率高 2.因为String这个对象基本是被所有的类对象都会使用的到了,如果可以被复写,就会很乱套,比如map的key ,如果是一个string为key的话,String如果可以 ...

  9. 如何用StatSVN统计SVN服务器某项目的代码量

    startsvn下载地址: https://sourceforge.net/projects/statsvn/?source=typ_redirect svn下载地址: https://www.vis ...

  10. vim编辑器-Linux从入门到精通第四天(非原创)

    文章大纲 一.vi介绍二.vim三种模式(重点)三.命令模式四.模式间的切换(重点)五.末行模式六.编辑模式七.实用功能八.扩展九.学习资料下载十.参考文章   一.vi介绍 Vi编辑器是所有Unix ...