日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux utmp结构体,Linux C编程如何使用联机帮助来解决编程问题?

發(fā)布時間:2025/3/15 linux 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux utmp结构体,Linux C编程如何使用联机帮助来解决编程问题? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.背景

多次學(xué)習(xí)C語言一直無法踏入C語言的大門,每次都是在學(xué)習(xí)C語言中的那些系統(tǒng)調(diào)用庫函數(shù)等望而卻只,linux下的系統(tǒng)調(diào)用需要我們?nèi)ビ洃浺恍]有規(guī)律的結(jié)構(gòu)體和一些大寫的宏定義并且還有一個函數(shù)多種形式的例如print fprintf sprintf等等,看起來就很不爽,寫起東西來真的很無語。什么都要自己寫,寫什么都要對返回結(jié)果進行出錯處理的判斷。(C語言菜鳥的一些抱怨勿噴),最近又重新拾起C來學(xué)習(xí)linux下的C編程。目前主要看linux程序設(shè)計(早年買的書),unix/linux編程實踐(電子版) unix環(huán)境高級編程(電子版),準(zhǔn)備入手unix/linux編程實踐主要看這本書其他兩本輔助來看。當(dāng)我在看unix/linux編程實踐的時候我先翻了一下目錄很讓我感覺耳目一新,不像是那種中規(guī)中矩的書,全書輔以實際例子來講解,每一個例子都涉及了很多系統(tǒng)調(diào)用。通過例子不緊緊學(xué)習(xí)到了系統(tǒng)調(diào)用的使用還掌握了編程的技巧。最近才剛剛看到第二章,在第二章中該書講解了如何通過linux聯(lián)機幫助來解決編程問題,讓我著實對這本書產(chǎn)生了很高的興趣。不用一開始就去學(xué)習(xí)大量枯燥的系統(tǒng)調(diào)用和庫函數(shù)就可以寫出一些小程序。

2.怎么去實現(xiàn)

舉個例子來說如何去實現(xiàn)who命令的編寫的,對于我這樣一個菜鳥實在不知道該如何下手。

1.那么第一步我該man who看看who命令本身是如何來實現(xiàn)的。

在man who的DESCRIPTION中找到了這樣的一句話。

If FILE is not specified, use /var/run/utmp.? /var/log/wtmp as FILE is common

大致意思就是who是通過讀取一個文件來顯示信息的,如果不指定這個文件的話默認(rèn)就是/var/run/utmp和/var/log/wtmp兩個文件。

2.接著立刻搜索utmp wtmp相關(guān)的man信息

man -k utmp

man -k wtmp

搜索的結(jié)果均指向了#include

3.緊接著就看看這個頭文件中包含了啥struct?utmp?{

short???ut_type;??????????????/*?Type?of?record?*/

pid_t???ut_pid;???????????????/*?PID?of?login?process?*/

char????ut_line[UT_LINESIZE];?/*?Device?name?of?tty?-?"/dev/"?*/

char????ut_id[4];?????????????/*?Terminal?name?suffix,

or?inittab(5)?ID?*/

char????ut_user[UT_NAMESIZE];?/*?Username?*/

char????ut_host[UT_HOSTSIZE];?/*?Hostname?for?remote?login,?or

kernel?version?for?run-level

messages?*/

struct??exit_status?ut_exit;??/*?Exit?status?of?a?process

marked?as?DEAD_PROCESS;?not

used?by?Linux?init(8)?*/

/*?The?ut_session?and?ut_tv?fields?must?be?the?same?size?when

compiled?32-?and?64-bit.??This?allows?data?files?and?shared

memory?to?be?shared?between?32-?and?64-bit?applications.?*/

#if?__WORDSIZE?==?64?&&?defined?__WORDSIZE_COMPAT32

int32_t?ut_session;???????????/*?Session?ID?(getsid(2)),

used?for?windowing?*/

struct?{

int32_t?tv_sec;???????????/*?Seconds?*/

int32_t?tv_usec;??????????/*?Microseconds?*/

}?ut_tv;??????????????????????/*?Time?entry?was?made?*/

#else

long???ut_session;???????????/*?Session?ID?*/

struct?timeval?ut_tv;????????/*?Time?entry?was?made?*/

#endif

int32_t?ut_addr_v6[4];????????/*?Internet?address?of?remote

host;?IPv4?address?uses

just?ut_addr_v6[0]?*/

char?__unused[20];????????????/*?Reserved?for?future?use?*/

};

一個utmp結(jié)構(gòu)體就出來了,大致猜出來可能是/var/log/utmp或者/var/log/wtmp中存放的數(shù)據(jù)都是這種結(jié)構(gòu)體的數(shù)據(jù)。那么思路就出來了,讀這個文件每次對一個結(jié)構(gòu)體大小的數(shù)據(jù)。然后輸出結(jié)果體中想要的成員變量就OK了。那么剩下的就是程序編寫的問題了。

3.實踐總結(jié)

剛看第二章總算還有點信心繼續(xù)學(xué)下去了,不至于像兩年前學(xué)習(xí)C語言那樣的迷茫,知道了如果去解決問題在linux下怎么去尋求幫助了。希望通過博客的形式記錄自己學(xué)習(xí)C語言的一些感悟吧。

總結(jié)

以上是生活随笔為你收集整理的linux utmp结构体,Linux C编程如何使用联机帮助来解决编程问题?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。