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

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

UNIX环境高级编程中文第二版PDF高清版

Unix/Linux编程实践教程【高清PDF中文版+附录光盘+代码】

将C语言梳理一下,分布在以下10个章节中:

Linux-C成长之路(一):Linux下C编程概要

Linux-C成长之路(二):基本数据类型

Linux-C成长之路(三):基本IO函数操作

Linux-C成长之路(四):运算符

Linux-C成长之路(五):控制流

Linux-C成长之路(六):函数要义

Linux-C成长之路(七):数组与指针

Linux-C成长之路(八):存储类,动态内存

Linux-C成长之路(九):复合数据类型

Linux-C成长之路(十):其他高级议题

C++ Primer Plus 第6版 中文版 清晰有书签PDF+源代码

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, 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 */

};

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/49dd6b0bbd71a9ca8efab4df42dfbd2d.html