linux utmp结构体,Linux C编程如何使用联机帮助来解决编程问题?
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 悬浮窗java_Java制作一个简易的悬
- 下一篇: linux 其他常用命令