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 分钟,只学习一个函数即可。我们下次再见。

相关推荐

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

    2024-06-08 03:26:01       34 阅读
  2. 在Linux或类Unix系统获取帮助的命令

    2024-06-08 03:26:01       34 阅读
  3. 如何接手一个系统

    2024-06-08 03:26:01       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-08 03:26:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-08 03:26:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-08 03:26:01       82 阅读
  4. Python语言-面向对象

    2024-06-08 03:26:01       91 阅读

热门阅读

  1. C#朗读语音

    2024-06-08 03:26:01       33 阅读
  2. 第3章 列表简介

    2024-06-08 03:26:01       31 阅读
  3. MySQL数据库(7)

    2024-06-08 03:26:01       25 阅读
  4. 快慢指针算法举例

    2024-06-08 03:26:01       33 阅读
  5. pytest +allure在测试中的应用

    2024-06-08 03:26:01       30 阅读
  6. Python笔记 - Lambda表达式

    2024-06-08 03:26:01       24 阅读
  7. Kotlin 注解

    2024-06-08 03:26:01       33 阅读
  8. Android14 WMS-Power键短按流程

    2024-06-08 03:26:01       26 阅读
  9. LeetCode 4 - 寻找两个正序数组的中位数

    2024-06-08 03:26:01       25 阅读