`
samuschen
  • 浏览: 397202 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

linux man 手册各个章节的意义和用法

阅读更多

Linux的man很强大,该手册分成很多section,使用man时可以指定不同的section来浏览,各个section意义如下:
1 - commands
2 - system calls
3 - library calls
4 - special files
5 - file formats and convertions
6 - games for linux
7 - macro packages and conventions
8 - system management commands
9 - 其他
解释一下,
1是普通的命令
2是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)
3是库函数,如printf,fread
4是特殊文件,也就是/dev下的各种设备文件
5是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
6是给游戏留的,由各个游戏自己定义
7是附件还有一些变量,比如向environ这种全局变量在这里就有说明
8是系统管理用的命令,这些命令只能由root使用,如ifconfig
想要指定section就直接在man的后面加上数字,比如 :
man 1 ls
man 3 printf
等等
对于像open,kill这种既有命令,又有系统调用的来说,man open则显示的是open(1),也就是从最前面的section开始,如果想查看open系统调用的话,就得man 2 open

关于库函数和系统调用

库函数是高层的,完全运行在用户空间, 为程序员提供调用真正的在幕后完成实际事务的系统调用的更方便的接口。系统调用在内核态运行并且由内核自己提供。标准C库函数printf() 可以被看做是一个通用的输出语句,但它实际做的是将数据转化为符合格式的字符串并且调用系统调用 write() 输出这些字符串。

是否想看一看printf() 究竟使用了哪些系统调用? 这很容易,编译下面的代码。

 

#i nclude <stdio.h>
int main(void)
{ printf("hello"); return 0; }

使用命令gcc -Wall -o hello hello.c 编译。用命令 strace hello 跟踪该可执行文件。是否很惊讶? 每一行都和一个系统调用相对应。 strace是一个非常有用的程序,它可以告诉你程序使用了哪些系统调用和这些系统调用的参数,返回值。 这是一个极有价值的查看程序在干什么的工具。在输出的末尾,你应该看到这样类似的一行 write(1, "hello", 5hello) 。这就是我们要找的。藏在面具printf() 的真实面目。既然绝大多数人使用库函数来对文件I/O进行操作(像 fopen, fputs, fclose)。 你可以查看man说明的第二部分使用命令man 2 write 。man说明的第二部分专门介绍系统调用(像kill() read() )。 man说明的第三部分则专门介绍你可能更熟悉的库函数(像cosh() random() )。

你甚至可以编写代码去覆盖系统调用,正如我们不久要做的。骇客常这样做来为系统安装后门或木马。 但你可以用它来完成一些更有益的事,像让内核在每次某人删除文件时输出 “ Tee hee, that tickles! ” 的信息。

 

 

自己总结:

从程序完成的功能来看,函数库提供的函数通常是不需要操作系统的服务,函数是在用户空间内执行的,除非函数涉及到I/O操作等,一般是不会切到核心态的。系统调用 是要求操作系统为用户提供进程,提供某种服务,通常是涉及系统的硬件资源和一些敏感的软件资源等。

     函数库的函数,尤其与输入输出相关的函数,大多必须通过Linux的系统调用来完成。因此我们可以将函数库的函数当成应用程序设计人员与系统调用程序之间 的 一个中间层,通过这个中间层,我们可以用一致的接口来安全的调用系统调用。这样程序员可以只要写一次代码就能够在不同版本的linux系统间使用积压种具 体实现完全不同的系统调用。至于如何实现对不同的系统调用的兼容性问题,那是函数库开发者所关心的问题。

     从程序执行效率来看,系统调用的执行效率大多要比函数高,尤其是处理输入输出的函数。当处理的数据量比较小时,函数库的函数执行效率可能比较好,因为函数 库的作法是将要处理的数据先存入 缓冲区内,等到缓冲区装满了,再将数据一次写入或者读出。这种方式处理小量数据时效率比较高,但是在进行系统调用时,因为用户进程从用户模式进入系统核心 模式,中间涉及了许多额外的任务的切换工作,这些操作称为上下文切换,此类的额外工作会影响系统的执行效率。但是当要处理的数据量比较大时,例如当输入输 出的数据量超过文件系统定义的尽寸时,利用系统调用可获得较高的效率。

     从程序的可移植性的角度来看,相对于系统调用,C语言的标准备函数库(ANSI C) 具备较高的可移植性,在不同的系统环境下,只要做很少的修改,通常情况是不需要修改的。

分享到:
评论

相关推荐

    linux命令自定义man手册

    并且增加很多命令的注释和常用的命令格式,因此可以称作自定义man手册,将其放在/bin目录下,加上执行权限,即可随便查看命令的相关注释,比如sed和awk,记录了大量命令的用法和例子,也可以自己把常用的命令格式...

    Linux Unix 的man手册

    chm文件,linux、unix编程必备宝典,所有参考函数用法,解释,例子。 就像windows下编程的msdn一样。很方便,带索引查询

    linux命令大全(chm)

    Linux命令大全可以作为参考手册,提供了对每个命令的详细说明、用法示例以及可用选项和参数的解释。这样的命令大全可以帮助用户快速查找和学习各种Linux命令,提高命令行操作的效率和准确性。 在Linux系统中,可以...

    最全Linux常用命令大全

    Linux命令大全可以作为参考手册,提供了对每个命令的详细说明、用法示例以及可用选项和参数的解释。这样的命令大全可以帮助用户快速查找和学习各种Linux命令,提高命令行操作的效率和准确性。 在Linux系统中,可以...

    linux简明系统维护手册

    2、常用的命令  这里我列出一些经常用的命令,具体的用法可以参见相关手册页(希望你的英文不象我这么差)。  vi(一定要会用这个你非常讨厌的... man(手册)  上面这些命令都是最最常用的,一定要把基本用法记牢。

    Linux指令速查手册.part1.rar

    1.49 manpath指令:设置man手册的查询路径  1.50 mkfontdir指令:创建字体文件目录  1.51 mount指令:挂载文件系统  1.52 mpost指令:系统的绘画工具  1.53 msgcat指令:合并消息目录  第2章 系统设置  ...

    Linux操作系统基础教程

    据我所知,大多数的 Linux 发行版本(Linux distribution)和核心(Kernel)都是可以 从网上下载的,但是我不推荐易用这种方法得到 Linux,因为仅仅核心就有几十个 Mbit 的 数据量,而一个完整的发行版本大概都是 1...

    cppman:适用于Linux的C ++ 981114手册页

    cppman 适用于Linux的C ++ 98/11/14/17/20手册页,来自和 。特征支持两个后端(使用cppman -s切换): 语法高亮显示对部分和示例源代码的支持。 用法/接口类似于“ man”命令联机帮助页之间的超链接(仅在pager = ...

    firectl:控制Firejail桌面集成

    查看《 和手册: man firecfg 。用法要查看可以启用哪些应用程序: firectl status 要为程序启用Firejail,请执行以下操作: sudo firectl enable firefox 要为程序禁用Firejail,请执行以下操作: sudo firectl ...

    fileobj:基于Ncurses的带有vi界面的十六进制编辑器(上游)

    Linux和其他类似Unix的软件 Windows(实验性,功能限制) 要求 Python 3.2以上 ncurses(curses Python模块) C编译器(Windows上不需要) 安装 (可选地,定义__FILEOBJ_SETUP_USE_MAN环境变量以使setup.py安装...

    mrr2c:将Metek MRR-2微型雨雷达数据文件转换为HDF

    mrr2c 将Metek MRR-2微型雨雷达数据文件转换为NetCDF。... 另请参见手册页: man mrr2c安装建议在Linux或类似Unix的操作系统上运行mrr2c。 要求: Python 2.7或3或兼容的Python发行版,例如Anaconda 要

    tldr:tldr的Golang命令行客户端https:github.comtldr-pagestldr

    这样可以防止长时间阅读帮助标志输出和手册页。 用法 usage: tldr [OPTION]... SEARCH available commands: -v, --version print version and exit -h, --help print this help and exit -u, --update update ...

    Java-PHP-C#

    ereg() and eregi() 有一个特性是允许用户通过正则表达式去提取字符串的一部分(具体用法你可以阅读手册). 比如说,我们想从 path/URL 提取文件名 – 下面的代码就是你需要: ereg("([^\\/]*)$", $pathOrUrl, $regs);...

Global site tag (gtag.js) - Google Analytics