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

1.背景

多次学习C语言一直无法踏入C语言的大门,每次都是在学习C语言中的那些系统调用库函数等望而却只,linux下的系统调用需要我们去记忆一些没有规律的结构体和一些大写的宏定义并且还有一个函数多种形式的例如print fprintf sprintf等等,看起来就很不爽,写起东西来真的很无语。什么都要自己写,写什么都要对返回结果进行出错处理的判断。(C语言菜鸟的一些抱怨勿喷),最近又重新拾起C来学习linux下的C编程。目前主要看linux程序设计(早年买的书),unix/linux编程实践(电子版) unix环境高级编程(电子版),准备入手unix/linux编程实践主要看这本书其他两本辅助来看。当我在看unix/linux编程实践的时候我先翻了一下目录很让我感觉耳目一新,不像是那种中规中矩的书,全书辅以实际例子来讲解,每一个例子都涉及了很多系统调用。通过例子不紧紧学习到了系统调用的使用还掌握了编程的技巧。最近才刚刚看到第二章,在第二章中该书讲解了如何通过linux联机帮助来解决编程问题,让我着实对这本书产生了很高的兴趣。不用一开始就去学习大量枯燥的系统调用和库函数就可以写出一些小程序。

2.怎么去实现

举个例子来说如何去实现who命令的编写的,对于我这样一个菜鸟实在不知道该如何下手。

1.那么第一步我该man who看看who命令本身是如何来实现的。

在man who的DESCRIPTION中找到了这样的一句话。

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

大致意思就是who是通过读取一个文件来显示信息的,如果不指定这个文件的话默认就是/var/run/utmp和/var/log/wtmp两个文件。

2.接着立刻搜索utmp wtmp相关的man信息

man -k utmp

man -k wtmp

搜索的结果均指向了#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结构体就出来了,大致猜出来可能是/var/log/utmp或者/var/log/wtmp中存放的数据都是这种结构体的数据。那么思路就出来了,读这个文件每次对一个结构体大小的数据。然后输出结果体中想要的成员变量就OK了。那么剩下的就是程序编写的问题了。

3.实践总结

刚看第二章总算还有点信心继续学下去了,不至于像两年前学习C语言那样的迷茫,知道了如果去解决问题在linux下怎么去寻求帮助了。希望通过博客的形式记录自己学习C语言的一些感悟吧。

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

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

相关文章

ios 画线平滑_iOS 画贝塞尔曲线 连续曲线 平滑曲线 曲线图表

利用贝塞尔曲线画一段连续曲线bezierDemo2.pngbezierDemo1.pngimage.png如果我们根据几个点画一条连续的曲线, 我们使用的方法是- (void)addCurveToPoint:(CGPoint)endPoint controlPoint1:(CGPoint)controlPoint1 controlPoint2:(CGPoint)controlPoint2;这个方法是由一个结束点…

python中怎么判断字母大小写_python判断字符串是字母 数字 大小写(转载)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼今天遇到的字符串处理的问题,记录一下方便使用str1 input(请输入一个字符:)#初始化字符、数字、空格、特殊字符的计数lowercase 0uppercase 0number 0space 0other 0for strs in str1:#如果在字符串中…

深度linux安装好上不了网,Deepin Linux 无法上网

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼我又用回2008了LINUX图形界面还是太慢 我的感觉太敏锐 虽然LINUX的图形界面的延迟 从你鼠标发出信号 到XSERVER的视觉呈现也就几百毫秒 但还是感觉比WINDOWS NT的效率差了几百倍 .用的越久感觉越明显.WINDOWS图形界面下的操控不管你…

php 伪静态 获取当前页面路径_织梦移动适配PHP获取当前页面URL地址方法

在做织梦网站开发时,会遇到获取当前URL并做PHP判断。比如地区站群PC端的移动适配功能,下面提供PHP通用移动端适配方法。PC首页路径:www.xx.com移动端首页路径:m.xx.com地区PC首页路径:beijing.xx.com地区移动端首页路径…

linux客户端 存活检测,Linux下客户端检测服务器的 heartbeat

客户端代码,和一般的客户端不一样#include#include#include#include#include#include#include#include#include#include#include #include #define MAXDATASIZE 100int main(){int sockfd,nbytes,serv_port;char buf_serv_ip[16],buf[260];struct sockaddr_in serv_…

lua打开浏览器并加载网页_Lua访问网页

示例例子,实现https方式,登录网站,访问某个网页,修改其中参数的功能。其中xx应用时候需要修改。require("curl")local ipList {"192.168.1.1","192.168.1.1",}--登陆function loginWeb(ip)c curl.…

linux jar和zip,Linux命令———zip和jar文件压缩解压

Linux命令———zip和jar文件压缩解压(1)ubuntu 使用unzip和zip压缩文件1.功能作用:解压缩zip文件2.位置:/usr/bin/unzip3.格式用法:unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir]4.主要参数-c 将解压缩的结果显示…

python去除中间空格只留一个_python 删除字符串中的连续空格只保留一个

Centos 6.5(64bit)上安装Vertica single node在Win8上使用虚拟机Virtualbox安装Centos6.5,想在上面安装vertica. 以下记录了我在安装的过程中遇到的问题与一些解决方案. 1.安装Centos的时候遇到了一个恼人的问题,即 ...大型网站系统架构实践(四)h…

安卓 linux找回内置存储,Android手机自带内部存储路径的获取

我有一台中兴的Android手机,型号是 ZTE U930HD,手机没有插入外置SD卡(也就是Micro SD Card,原名Trans-flash Card(TF卡),2004年正式更名为Micro SD Card),但是机身自带了一个内置存储卡(也就是eMMC存储,大小…

原生js获取document_原生JS常用API整理

Anchor 对象:指HTML超链接1.修改一个链接的文本,链接和target//html部分访问 Microsoft改变超链接的文本和 URL。也改变 target 属性。target 属性的默认设置是 "_self",这意味着会在相同的窗口中打开链接。通过把 target 属性设置…

linux打包cpio命令例子,linux压缩命令——tar、cpio详解

常见的linux压缩方式:*.Z compress压缩*.gz gzip压缩*.bz2 bzip2压缩*.tar tar打包(没有压缩)*.tar.gz tar打包,并且经过gzip压缩*.tar.gz tar打包,并且经过bzip2压缩gzip、bzip2压缩是对单一文件压缩。下面就t…

flowjo汉化版_流式细胞分析软件FlowJo

FlowJo是一款专业的流式细胞分析软件,这款软件是流式领域最受推荐的一款专业分析软件,适合医学类的学生使用。软件能够帮助用户轻松了解了解细胞的状态变化, 拥有流动室和液流驱动系统,光电转换器和数据处理系统等先进的科学技术。软件特色&a…

c语言程序设计语言描述,C语言程序设计题目描述(详).txt

C语言程序设计题目描述(详).txtC01 pow1.05,n include void main float y1.05; int n1; FILE *p; /* * * * * * */ fprintfp,“d,.0f“,n,pow1.05,n; fclosep; C02 a11a002a11.aPaperdesign.dat include void main float a331.3,2.7,3.6,2,3,4.7,3,4,1.27; FILE *p; /* * * * *…

R语言smoothHR包_SmoothHR產品官方網站 全新體驗、正式上線 !

長期受許多國內外企業一致推薦及肯定的 SmoothHR 企業人資解決方案,新版網站正式上線了 ! 承襲 SmoothHR 備受肯定的視覺呈現,因應行動裝置的普遍運用,官方網站採用 RWD 響應式設計,帶給使用者跨裝置最佳的使用體驗 ! 並充分考慮使…

c程序设计语言 hello,Hello, World!

ch01-02-hello-world.mdcommit f63a103270ec8416899675a9cdb1c5cf6d77a498既然安装好了 Rust,我们来编写第一个 Rust 程序。当学习一门新语言的时候,使用该语言在屏幕上打印 Hello, world! 是一项传统,我们将沿用这一传统!注意&am…

python object单引号变成双引号_Python学习第163课--Linux命令行中的单引号和双引号...

【每天几分钟,从零入门python编程的世界!】我们都知道引号的作用就是为了引用,比如引用别人说的话,这句话就放在引号里面。而Linux命令行中的single quote(单引号)和dubble quote(双引号)有不同的作用。●双引号linux命令中双引号…

C语言条件循环语句执行步骤,C语言中for语句的执行过程是什么?

C语言中for语句的执行过程是:1、会先判断条件表达式是否成立,如果条件成立则执行中间循环体,执行完中间循环体后接着执行末尾循环体 ;2、在执行完末尾循环体后对条件表达式再次判断,若条件还成立,则继续重复…

python平方数迭代器_Python三大神器之迭代器详解

我们将要来学习python的重要概念迭代和迭代器,通过简单实用的例子如列表迭代器和xrange。可迭代一个对象,物理或者虚拟存储的序列。list,tuple,strins,dicttionary,set以及生成器对象都是可迭代的&#xff…

c语言规范标准中英文,C语言中英文翻译资料.doc

C语言中英文翻译资料.docThe C Programming LanguageC is a high-level programming language developed by Dennis Ritchie and Brian Kernighan at Bell Labs in the mid-1970s. Although originally designed as a systems programming language, C has proved to be a powe…

lvm 扩展根目录_Lvm扩展根目录容量

2、新加一块硬盘,我的是sdb先创建物理卷[rootredhat6-3~]#fdisk/dev/sdbCommand(mforhelp):nCommandactioneextendedpprimarypartition(1-4)pPartitionnumber(1-4):1Firstcylinder(1-261,default1):(回车,默认将所有空间分配给第一个主分区)Usingdefault…