Gnu/Linux 系统编程 - 如何获取帮助及一个演示

Gnu/Linux 系统编程 - 如何获取帮助及一个演示

今天开始写 Gnu/Linux 环境下的系统编程,主要的用的语言是 C,主要是为了学习 C 语言,边学边写,这样的学习速度是比较快的。

今天就先介绍下如何在手头上没有任何资料的情况下,如何自学编程。

首先,我们要会获取操作系统提供的帮助信息。接下来就介绍如何自己找帮助信息。

自己找帮助信息

Gnu/Linux 中,如果从系统获取相应的帮助信息呢?那就是系统自带的 man pages。如果没有安装可以安装之。

yum install -y man-pages

主要使用的几个章节:

  • 章节1:用户命令
  • 章节2:系统调用
  • 章节3:标准库函数
  • 章节8:系统/管理命令

man 命令默认的章节为1,如果要查看 sleep 命令如何使用,可以进行如下查询:

man sleep

如果要查看 sleep 的库函数如何使用,使用如下方式查询:

man 3 sleep

如果不确定要查询的命令或函数,可以使用 -k 选项:

man -k keyword

要想获取更详细的帮助信息,可以使用 info 命令:

info
# 直接查看具体的章节,如
info libc
# 向下移动光标,C-n
# 向上移动光标,C-p
# 按键方式就是 Emacs 的按键方式,这里就不介绍了
# 退出按 C-x C-c

一个演示

今天就介绍一下与用户相关的函数 getpwnam。我们通过上面介绍的方式来查看其帮助信息:

man 3 getpwnam

#include <sys/types.h>
#include <pwd.h>
#include <uuid/uuid.h>

struct passwd *
getpwnam(const char *login);

该函数需要的参数就是系统中的用户名,返回值就是一个 passwd 类型的结构体指针。该 passwd 结构体信息在帮助文件中也是有说明的,我把它贴出来:

struct passwd {
       char    *pw_name;       /* user name */
       char    *pw_passwd;     /* encrypted password */
       uid_t   pw_uid;         /* user uid */
       gid_t   pw_gid;         /* user gid */
       time_t  pw_change;      /* password change time */
       char    *pw_class;      /* user access class */
       char    *pw_gecos;      /* Honeywell login info */
       char    *pw_dir;        /* home directory */
       char    *pw_shell;      /* default shell */
       time_t  pw_expire;      /* account expiration */
       int     pw_fields;      /* internal: fields filled in */
};

掌握了上述信息后,就可以写点东西了。代码如下:

➜  my git:(liucc) ✗ cat my_getpwnam.c
#include <stdio.h>
#include <stdlib.h>
#include <pwd.h>


int main(int argc, char *argv[])
{
    /* 定义一个结构体,保存函数的返回值 */
    struct passwd *pwd;

    /* 需要给程序传递一个参数,该参数是系统中的用户 */
    if (argc < 2) {
        printf("Usage: %s <username>\n", argv[0]);
        exit(1);
    }

    /* 调用函数 */
    pwd = getpwnam(argv[1]);
    if (pwd == NULL) {
        printf("could not get %s record\n", argv[1]);
        exit(1);
    } else {
        printf("find [ %s ] record, the following is the info:\n", argv[1]);
        printf("Username: %s\n", pwd->pw_name);
        printf("Uid : %ld\n", (long)pwd->pw_uid);
        printf("Shell : %s\n", pwd->pw_shell);
    }

    return 0;
}

编译并运行得到:

➜  my git:(liucc) ✗ gcc -o my_getpwnam my_getpwnam.c
➜  my git:(liucc) ✗ ./my_getpwnam liuchuan
find [ liuchuan ] record, the following is the info:
Username: liuchuan
Uid : 501
Shell : /bin/bash

是不是很简单?好了,今天就到这里,每天 5 分钟,只学习一个函数即可。我们下次再见。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LavenLiu

常言道:投资效率是最大的投资。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值