当前位置: 首页 > news >正文

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

http://www.lryc.cn/news/362390.html

相关文章:

  • ffmpeg 的sws_scale接口函数解析
  • MoonBit 本周新增类型标注语法、继续进行核心库 API 整理工作
  • YOLOv10训练自己的数据集
  • 探索Web前端三大主流框架:Angular、React和Vue.js
  • 《HelloGitHub》第 98 期
  • Xtransfer面试内容
  • 论文笔记:Image Anaimation经典论文-运动关键点模型(Monkey-Net)
  • Kibana创建ElasticSearch 用户角色
  • Vue基础(2)响应式基础
  • Mysql基础教程(15):别名
  • SpringCloud 微服务中网关如何记录请求响应日志?
  • 【运维项目经历|028】Cobbler自动化部署平台构建项目
  • “物联网安全:万物互联背景下的隐私保护与数据安全策略“
  • LeetCode216组合总和3
  • 微软找腾讯接盘,Windows直接安装手机APP体验起飞了
  • 【Springcloud微服务】MybatisPlus下篇
  • i18n-demo
  • [Leetcode] 0-1背包和完全背包
  • 自定义类型:联合体和枚举
  • 【Cityengine】Cityengine生产带纹理的建筑模型导入UE4/UE5(下)
  • 详解51种企业应用架构模式
  • 【十年java搬砖路】Jumpserver docker版安装及配置Ldap登陆认证
  • C\C++内存管理(未完结)
  • 一个小时搞定JAVA面向对象(5)——抽象与接口
  • 图像关键特征描述方法-小目标
  • 【qt15】windeployqt 安装依赖
  • DETR论文重点
  • slf4j等多个jar包冲突绑定的排查方法使用IDEA的maven help解决
  • MySQL主从的延迟怎么解决呢?
  • 【一百】【算法分析与设计】N皇后问题常规解法+位运算解法