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.pswp.cn/news/257410.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257410.shtml
英文地址,請注明出處:http://en.pswp.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…