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<utmp.h>

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, orkernel version for run-levelmessages */struct  exit_status ut_exit;  /* Exit status of a processmarked as DEAD_PROCESS; notused by Linux init(8) *//* The ut_session and ut_tv fields must be the same size whencompiled 32- and 64-bit.  This allows data files and sharedmemory to be shared between 32- and 64-bit applications. */#if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32int32_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 */#elselong   ut_session;           /* Session ID */struct timeval ut_tv;        /* Time entry was made */#endifint32_t ut_addr_v6[4];        /* Internet address of remotehost; IPv4 address usesjust ut_addr_v6[0] */char __unused[20];            /* Reserved for future use */};

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

3.实践总结

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

转载于:https://blog.51cto.com/forlinux/1435127

Linux C编程如何使用联机帮助来解决编程问题?相关推荐

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

    1.背景 多次学习C语言一直无法踏入C语言的大门,每次都是在学习C语言中的那些系统调用库函数等望而却只,linux下的系统调用需要我们去记忆一些没有规律的结构体和一些大写的宏定义并且还有一个函数多种形 ...

  2. linux 运维高级脚本生成器,Linux运维系列,Shell高级脚本自动化编程实战

    课程文件目录: Linux自动化运维系列 Shell高级脚本自动化编程实战 [6.1G] ┣━━01.Shell基础概述 [315.1M] ┃ ┣━━1-1 Shell脚本体系概述.mp4 [154. ...

  3. Linux学习之C语言的进程与线程编程

    前言 继续Linux的学习,学到了Linux系统下的进程与线程的概念,布置了有关其的实验题,用C语言编程启动进程线程,习惯了Java多线程编程,这次在Linux下玩一玩C语言进程线程编程. 本文原创, ...

  4. Linux高并发服务器开发---笔记4(网络编程)

    0705 第4章 项目制作与技能提升 4.0 视频课链接 4.1 项目介绍与环境搭建 4.2 Linux系统编程1.4.3 Linux系统编程2 4.4 多进程 1-9 10.进程间通信☆☆☆ 4.5 ...

  5. 【Linux服务器开发系列】详解多线程网络编程丨百分百干货分享丨学到就是赚到

    90分钟搞懂多线程网络编程模型 1. 网络编程关注的问题 2. 网络编程的几种模型reactor,one loop per thread及其变种 3. skynet,redis,nginx,memca ...

  6. Linux静态库与动态库的相关概念以及编程

    一.分模块编程: 当我们在实现一个项目的时候,比如wifi小车,我们会碰到超声波模块,电机模块,wifi模块等模块的开发,这时候,我们可以让不同的小组成员来完成不同的模块,作为项目负责人只需要调用他们 ...

  7. linux c int16进制转10进制,[编程题] 进制转换(16进制转10进制)

    [编程题] 进制转换 3/3 [编程题] 进制转换 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 写出一个程序,接受一个十六进制的数,输出该数值的十进制表示. ...

  8. python面向对象编程的优点-Python 基础知识----面向对象编程

    一.面向对象编程介绍 面向过程编程: 核心是过程二字,过程指的是解决问题的步骤,即先做什么再干什么然后干什么. 基于该思想编写程序好比在设计一条流水线,是一种机械式的思维方式. 优点:复杂的问题流程化 ...

  9. java编程基础素数实验报告,JAVA 基础编程练习题1 (输出素数)

    JAVA 基础编程练习题1 (输出素数) JAVA 基础编程练习题1 (输出素数) 题目:判断 101-200 之间有多少个素数,并输出所有素数. 程序分析:判断素数的方法:用一个数分别去除 2 到 ...

最新文章

  1. tensorflow生成对抗网络
  2. BigDecimal 使用详解
  3. STL priority_queue sort 自定义比较终极模板
  4. MATLAB之简谐信号声音的生成及其调制性
  5. Java web—Servlet的请求与响应
  6. android--系统jar包引用
  7. 2013流行Python项目汇总
  8. 一加8系列有望明年二季度发布:配备双曲面打孔屏
  9. SQL查询字段约束名的语句
  10. (java+selenium)Web自动化12306模拟人工滑块验证
  11. Qt 利用海康摄像头的ISAPI协议进行抓图等操作
  12. unity简单的脚本 播放3D立体音效(近大远小效果)
  13. 【7.13】代码源 -【饿饿 饭饭】【路径计数2】【函数求和】
  14. axrue9不显示右侧文件_Axure 9.0基础教程:史上最详细的元件说明,建议你认真看完(一)...
  15. scrapy爬取昵图网图片
  16. NIMK博弈游戏,POJ-2315 Football Game
  17. Maven安装部署详细步骤(Win7系统)
  18. 泰达机器人董事长_创新驱动湾区智造,2018深圳机器人创新与发展论坛成功举行...
  19. h5 加载完成_【全国“创文”】城市文明宣传H5案例赏析
  20. win8系统换装android,Win8.1+Android4.2双系统切换 蓝魔i10pro真机谍照

热门文章

  1. android sdk版本升级,个推 Android SDK 老版本升级2.9.+
  2. tar oracle home 权限不够,linux系统安装jdk
  3. 前端动态获取servlet虚拟路径_Day40_Servletamp;HTTPamp;Request
  4. java中如何声明班干部,java类成员变量的定义和声明
  5. linux 怎么管理文件夹,Linux 是如何管理目录文件?
  6. android源代码下载AE 文字样式,阅读Android framework源代码方式
  7. .net framework处理xml
  8. 一些实用的JS代码。
  9. 转载—android 媒体库数据更新解决办法总结
  10. JAVA设计模式 - 抽象工厂模式