linux命令编写,编写简单的linux命令

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

又到了周四分享环节,鉴于最近在看linux编程实践,所以就的讲一下如何编写一个简单的who命令。

PPT

Manual Page

Manual Page 也就是大家常用的man命令,是unix、类unix系统常用的程序文档。1

2

3

4Usage:

$ man

$ man -k [apropos options] regexp

这种形式我们可以通过关键字来匹配手册中的descriptions。

man man:1 Executable programs or shell commands

2 System calls (functions provided by the kernel)

3 Library calls (functions within program libraries)

4 Special files (usually found in /dev)

5 File formats and conventions eg /etc/passwd

6 Games

7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)

8 System administration commands (usually only for root)

9 Kernel routines [Non standard]

可以看出来我们主要用2 和 3

WHO1

2

3

4$ who

kcilcarus tty1 2018-07-06 06:06 (:0)

用户名 终端 时间

who命令对应的输出如上所示,那么我们猜下who的工作原理:用户登录登出的时候,会将信息保存在某个文件

who命令打开这个文件

读取文件信息

输入到控制台

恩, 逻辑很清晰。 下面就是如何做了。

如何知道who命令读取的那个文件呢?1

2

3

4

5

6

7

8

9

10

11

12$ man who

use /var/run/utmp

注意到这句话,

$ man -k utmp

utmp (5) - login records

$ man 5 utmp

The utmp file allows one to discover information about who is currently using the system.

那肯定是他了,而且还提供了相应的结构体信息,当然我们也可以在/usr/include/下面找到标准头文件

到这里我们知道了只要读取utmp文件就可以了。那么如何读取文件信息呢?

很自然我们想到了 man -k file, 只要知道了用哪个命令就好了, 当然也可以google1

2

3

4

5

6

7

8$ man -k file | grep read

read (2) - read from a file descriptor

其中这一行引起了我们的注意。哈哈 皮卡丘就是你了。

$ man 2 read

ssize_t read(int fd, void *buf, size_t count);

文件描述符 缓冲区 字节数

通过阅读文档, 我们了解到read有3个参数,返回值是成功读取的字节数并讲读取的字节存入缓冲区。

那应该就是他了,但是文件描述符又是什么鬼?

我们继续往下看,在see also 里 我们看到有个open(2)1

2

3

4$ man 2 open

int open(const char *pathname, int flags);

路径 进入模式: 只读,只写,读写

返回值是文件描述符。

那么,整理一下。open 打开文件, 返回文件描述符

read 根据文件描述符,读取文件内容,一次读取struct utmp 大小即可

输出到控制台

close 关闭文件1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35#include

#include

#include

#include

void (struct utmp * record);

int main()

{

struct utmp current_record;

int fd;

int len = sizeof(current_record);

if ((fd = open("/var/run/utmp", O_RDONLY)) == -1)

{

perror("/var/run/utmp");

exit(1);

}

while (read(fd, &current_record, len) == len)

{

show_record(&current_record);

}

close(fd);

exit(0);

}

void (struct utmp * record)

{

printf("%8s ", record->ut_user);

printf("%8s", record->ut_line);

printf("n");

}

恩 我们执行一下,1

2

3

4$ gcc test.c -o test

$ ./test

reboot ~

kcilcarus tty1

基本上可以了,不过reboot是啥,时间也没有,有空了在优化下。

那么,一个简单的who命令就到此结束啦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在ASP.NET 5和XUnit.NET中进行LocalDB集成测试

今天继续昨天的话题——单元测试,不过是在ASP.NET 5中的单元测试。 在当前的Visual Studio 2015 CTP6中,MSTest是不支持对ASP.NET 5项目进行单元测试的。因而,要对ASP.NET 5进行单元测试(或集成测试),就需要…

mysql数据库详解(续一)

第三节 配置MYSQL数据库配置mysql数据库通常通过命令行选项、配置文件、和环境变量来进行,并且优先顺序也是命令行最高,环境变量优先级最低。1、配置文件定位mysql的配置文件可以在以下四个位置:(按照查找顺序)1、/etc/my.cnf2、DATADIR/my.c…

ImageLoader设置圆形图片

//自定义MyApplication类&#xff0c;需要在列表清单中设置 <application android:name"com.ce.image.MyApplication"//将类的名称赋给这个application package com.ce.image;import com.nostra13.universalimageloader.core.DisplayImageOptions;import …

用户模式 内核模式 linux,linux – “内核模式”和“用户模式”硬件...

内核模式和用户模式是硬件功能,特别是处理器的功能.专为中高端系统(PC,功能手机,智能手机,除最简单的网络设备之外的所有系统……)设计的处理器都包含此功能.内核模式可以使用不同的名称&#xff1a;管理程序模式,特权模式等.在x86(PC中的处理器类型)中,它被称为“ring 0”,用户…

SANS研究所:7大最危险的攻击技术介绍

本文讲的是SANS研究所&#xff1a;7大最危险的攻击技术介绍&#xff0c;很显然&#xff0c;网络攻击威胁已经从理论走入现实生活&#xff0c;无论是个人、企业还是国家重要基础设施都处在日益严峻的威胁之中。本周三&#xff08;2月15日&#xff09;在加利福尼亚州旧金山举办的…

第六周作业

上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些&#xff0c; 各有什么优缺点&#xff1f; &#xff08;提示&#xff1a;搜索一下Microsoft TFS、GitHub、Trac、Bugzilla、Rationale&#xff0c;Apple XCode&#xff09;? 答&#xff1a;目前流行的源程序版…

css 相对定位 ie7问题

div{position:absolute;left:10px;}  或 div{position:absolute;top:10px;}   有时候left或top属性为0就省略不写&#xff0c;在ie7里面元素会错位&#xff0c;解决变法就是left和top属性都加上。转载于:https://www.cnblogs.com/xhlddm/p/4439065.html

linux不登录用户就关机,Linux无法被远程登录;用户的关机, 重启,注销,新增用户,删除用户...

不能使用xshell连接到我的Linux服务器通过再windows的cmd中ping了我的Linux地址&#xff0c;发现网络不通。查看百度发现是因为网络没有选桥接模式&#xff0c;然后选完桥接模式告诉我&#xff1a;然后发现没有虚拟网卡&#xff0c;原因是之前装过vm没有卸载干净&#xff0c;使…

初次就这么给了你(Django-rest-framework)

Django-Rest-Framework Django-Rest框架是构建Web API强大而灵活的工具包。 简单粗暴&#xff0c;直奔主题。 pip install djangopip install djangorestframeworkpip install pygments # 代码显示高亮pip安装好需要的工具包之后&#xff0c;我们就开始创建一…

error和exception

Error&#xff08;错误&#xff09;表示系统级的错误和程序不必处理的异常&#xff0c;是java运行环境中的内部错误或者硬件问题。比如&#xff1a;内存资源不足等。对于这种错误&#xff0c;程序基本无能为力&#xff0c;除了退出运行外别无选择&#xff0c;它是由Java虚拟机抛…

使用logminer分析日志文件

实验环境 win7 64 oracle PL/SQL Release 11.2.0.1.0 - Productionhttp://blog.csdn.net/tianlesoftware/article/details/5604497--这些操作需要在sysdba身份执行1.执行分析之前需要添加补充日志SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;查看补充日志是否开启&…

linux c++ 获取时间,详解Linux下的C++时间类型:time_t

Unix时间戳(Unix timestamp)&#xff0c;或称Unix时间(Unix time)、POSIX时间(POSIXtime)&#xff0c;是一种时间表示方式&#xff0c;定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。Unix时间戳不仅被使用在Unix系统、类Unix系统中&#xff0c;也在许多其他…

程序员的国庆节如何安排,你想好了吗?

2019独角兽企业重金招聘Python工程师标准>>> 就要国庆放假了&#xff0c;国庆节是旅游的黄金期&#xff0c;同时也是我们买买买的幸福期&#xff0c;作为一名技术开发&#xff0c;除了要安排假期旅游行程外也不要忘记提升自己&#xff0c;准备好学习计划&#xff0c…

Print! Print! Print!

print语句可以实现打印--只是对程序员友好的标准输出流的接口而已。 从技术角度来讲&#xff0c;这是把一个或多个对象转换为其文本表达形式&#xff0c;然后发送给标准输出或另一个类似文件的流。 更详细地说&#xff0c;在Python中&#xff0c;打印与文件和流的概念紧密相连。…

C#让TopMost窗体弹出并置顶层但不获取当前输入焦点的终极办法

为了使程序在弹出窗口时置顶层且不获取系统输入焦点&#xff0c;避免影响用户当前的操作&#xff0c;来电通来电弹屏软件尝试过N多种办法&#xff0c;例如&#xff1a;弹出前保存当前焦点窗口句柄&#xff0c;弹出时因为使用TopMost系统默认将焦点交给了弹出窗口&#xff0c;弹…

微服务实战(一):微服务架构的优势与不足

本文讲的是微服务实战&#xff08;一&#xff09;&#xff1a;微服务架构的优势与不足&#xff0c;【编者的话】本文来自Nginx官方博客&#xff0c;是微服务系列文章的第一篇&#xff0c;主要探讨了传统的单体式应用的不足&#xff0c;以及微服务架构的优势与挑战。正如作者所说…

linux创建zip+函数,linux+shell基础知识

目录&#xff1a;1.路径&#xff1a;2.进程&#xff1a;3.清屏和退出当前命令操作&#xff1a;4.ls 参数&#xff1a;5.创建目录\文件\复制文件&#xff1a;6.查看文件内容&#xff1a;7.linux通配符&#xff1a;8.grep:9.终止命令&#xff1a;10.搜索文件&#xff1a;11.查看网…

关于浮动float属性和position:absolute属性的区别

最近返回头看了很多书籍&#xff0c;一直在纠结float属性和absolute绝对定位的区别和使用的情况&#xff0c;给大家分享一下自己的心得和体会吧。 1&#xff0c;float属性 float属性意义是让元素拜托独占一行的霸道总裁&#xff0c;成为一个普普通通的人。比如下面这个例子 如图…

Climbing Stairs

You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? 分析&#xff1a;考虑走第n步时的情况&#xff0c;可以从第n-1个台阶走一步&#xff0c;也可以从…

3dmax linux版本,如何安装Linux版FLOW-3D及注意事项

如何安装Linux版FLOW-3D及注意事项安装Linux版的flow3d流程&#xff1a;1、复制flow3d安装CD盘中unix文件夹到Linux系统桌面&#xff1b;(或从CD中直接安装也可以)2、从terminal进入unix文件夹&#xff1b;3、./install或./install_flow3d4、提示是否接受license协议&#xff0…