2012-11-08 03:32:11 atupal 阅读数 791
http://www.aka.org.cn/Lectures/002/Lecture-2.1.1/basic.html

1.4  Linux 的编程常识

  • 标准 (ANSI C, POSIX, SVID, XPG, ...)

  • 函数库和系统调用

  • 在线文档 (man, info, HOW-TO, ...)

  • C 语言编程风格

  • 库和头文件的保存位置

  • 共享库及其相关配置

1.4.1  标准 (ANSI C, POSIX, SVID, XPG, ...)

  • ANSI C:这一标准是 ANSI(美国国家标准局)于 1989 年制定的 C 语言标准。 后来被 ISO(国际标准化组织)接受为标准,因此也称为 ISO C。
    ANSI C 的目标是为各种操作系统上的 C 程序提供可移植性保证,而不仅仅限于 UNIX。 该标准不仅定义了 C 编程语言的语发和语义,而且还定义了一个标准库。这个库可以根据 头文件划分为 15 个部分,其中包括:字符类型 (<ctype.h>)、错误码 (<errno.h>)、 浮点常数 (<float.h>)、数学常数 (<math.h>)、标准定义 (<stddef.h>)、 标准 I/O (<stdio.h>)、工具函数 (<stdlib.h>)、字符串操作 (<string.h>)、 时间和日期 (<time.h>)、可变参数表 (<stdarg.h>)、信号 (<signal.h>)、 非局部跳转 (<setjmp.h>)、本地信息 (<local.h>)、程序断言 (<assert.h>) 等等。
  • POSIX:该标准最初由 IEEE 开发的标准族,部分已经被 ISO 接受为国际标准。该标准的具体内容 见 1.1.3。POSIX.1 和 POSIX.2 分别定义了 POSIX 兼容操作系统的 C 语言系统接口 以及 shell 和工具标准。这两个标准是通常提到的标准。
  • SVID:System V 的接口描述。System V 接口描述(SVID)是描述 AT&&;T Unix System V 操作 系统的文档,是对 POSIX 标准的扩展超集。
  • XPG:X/Open 可移植性指南。X/Open 可移植性指南(由 X/Open Company, Ltd.出版), 是比 POSIX 更为一般的标准。X/Open 拥有 Unix 的版权,而 XPG 则指定成为 Unix 操作系统必须满足的要求。

1.4.2  函数库和系统调用

1. glibc

众所周知,C 语言并没有为常见的操作,例如输入/输出、内存管理,字符串操作等提供内置的支持。 相反,这些功能一般由标准的“函数库”来提供。GNU 的 C 函数库,即 glibc,是 Linux 上最重要的 函数库,它定义了 ISO C 标准指定的所有的库函数,以及由 POSIX 或其他 UNIX 操作系统 统变种指定的附加特色,还包括有与 GNU 系统相关的扩展。目前,流行的 Linux 系统使用 glibc 2.0 以上的版本。glibc 基于如下标准:

  • ISO C: C 编程语言的国际标准,即 ANSI C。
  • POSIX:GNU C 函数库实现了 ISO/IEC 9945-1:1996 (POSIX 系统应用程序编程接口, 即 POSIX.1)指定的所有函数。该标准是对 ISO C 的扩展,包括文件系统接口原 语、设备相关的终端控制函数以及进程控制函数。同时,GUN C 函数库还支持部分由 ISO/IEC 9945-2:1993(POSIX Shell 和 工具标准,即 POSIX.2)指定的函数, 其中包括用于处理正则表达式和模式匹配的函数。
  • Berkeley Unix:BSD 和 SunOS。GNU C 函数库定义了某些 UNIX 版本中尚未标准化的函数, 尤其是 4.2 BSD, 4.3 BSD, 4.4 BSD Unix 系统(即“Berkeley Unix”)以及“SunOS” (流行的 4.2 BSD 变种,其中包含有某些 Unix System V 的功能)。BSD 函数包括 符号链接、select 函数、BSD 信号处理函数以及套接字等等。
  • SVID:System V 的接口描述。GNU C 函数库定义了大多数由 SVID 指定而未被 ISO C 和 POSIX 标准指定的函数。来自 System V 的支持函数包括进程间通信和共享内存、 hsearch 和 drand48 函数族、fmtmsg 以及一些数学函数。
  • XPG:X/Open 可移植性指南。GNU C 函数库遵循 X/Open 可移植性指南(Issue 4.2) 以及所有的 XSI(X/Open 系统接口)兼容系统的扩展,同时也遵循所有的 X/Open Unix 扩展。

2. 其他重要函数库

除 glibc 之外,流行的 Linux 发行版中还包含有一些其他的函数库,这些函数库具有重要地位, 例如:

  • GNU Libtool:GNU Libtool 实际是一个脚本生成工具,它可以为软件包开发者提供一般性 的共享库支持。
    以前,如果源代码包的开发者要利用共享库的优点,则必须为每个软件包可支持的平台编写 定制的支持代码。并且还需要设计配置接口,以便软件包的安装程序能够正确选择要建立的 库类型。利用 GNU Libtool,则可以简化开发者的这一工作。它在一个单独的脚本中同时封装 了与平台相关的依赖性以及用户界面。GNU Libtool 可使每个宿主类型的完整功能可通过 一般性的接口获得,同时为程序员隐藏了宿主的特殊性。GNU Libtool 一致性接口是可靠的, 用户不必阅读那些晦涩的文档,以便在每个平台上建立共享库。他们只需运行软件包的配置 脚本,而由 libtool 完成繁复的工作。
  • CrackLib:CrackLib 为用户提供了一个 C 语言函数接口,利用这一函数,可避免用户选择 容易破解的密码。该函数库可在类似 passwd 的程序中使用。
  • LibGTop:LibGTop 是一个能够获取进程信息以及系统运行信息的函数库,这些信息包括: 系统的一般信息、SYS V IPC 限制、进程列表、进程信息、进程映射、文件系统使用信息等。
  • 图形文件操作函数库:包括 libungif、libtiff、libpng、Imlib, libjpeg 等,可分别用来操作 GIF、TIFF、PNG、JPEG 以及其他一些格式图形文件。

3. 系统调用

系统调用是操作系统提供给外部程序的接口。在 C 语言中,操作系统的系统调用通常通过 函数调用的形式完成,这是因为这些函数封装了系统调用的细节,将系统调用的入口、参数以及 返回值用 C 语言的函数调用过程实现。在 Linux 系统中,系统调用函数定义在 glibc 中。

谈到系统调用时,需要注意如下几点:

  • 系统调用函数通常在成功时返回 0 值,不成功时返回非零值。如果要检查失败原因,则 要判断 errno 这个全局变量的值,errno 中包含有错误代码。
  • 许多系统调用的返回数据通常通过引用参数传递。这时,需要在函数参数中传递一个 缓冲区地址,而返回的数据就保存在该缓冲区中。
  • 不能认为系统调用函数就要比其他函数的执行效率高。要注意,系统调用是一个非常耗时 的过程。

有关系统调用我们将在以后详细讲述。

1.4.3  在线文档 (man, info, HOW-TO, ...)

1. man

man,即 manunal,是 UNIX 系统手册的电子版本。根据习惯,UNIX 系统手册通常分为 不同的部分(或小节,即 section),每个小节阐述不同的系统内容。目前的小节划分如下:

  1. 命令:普通用户命令
  2. 系统调用:内核接口
  3. 函数库调用:普通函数库中的函数
  4. 特殊文件:/dev 目录中的特殊文件
  5. 文件格式和约定:/etc/passwd 等文件的格式
  6. 游戏。
  7. 杂项和约定:标准文件系统布局、手册页结构等杂项内容
  8. 系统管理命令。
  9. 内核例程:非标准的手册小节。便于 Linux 内核的开发而包含

其他手册小节:

  • l: PostgreSQL 数据库命令
  • n: TCL/TK 命令

手册页一般保存在 /usr/man 目录下,其中每个子目录(如 man1, man2, ..., manl, mann) 包含不同的手册小节。使用 man 命令查看手册页。

man 命令行:
man [-acdfFhkKtwW] [-m system] [-p string] [-C config_file] [-M path] [-P pager] [-S section_list] [section] name

常用命令行:
$ man open
$ man 7 man
$ man ./myman.3

2. info

Linux 中的大多数软件开发工具都是来自自由软件基金会的 GNU 项目,这些工具软件 件的在线文档都以 info 文件的形式存在。info 程序是 GNU 的超文本帮助系统。

info 文档一般保存在 /usr/info 目录下,使用 info 命令查看 info 文档。

要运行 info,可以在 shell 提示符后输入 info,也可以在 GNU 的 emacs 中键入 Esc-x 后跟 info。

info 帮助系统的初始屏幕显示了一个主题目录,你可以将光标移动到带有 * 的主题菜单上面,然后按回车键
进入该主题,也可以键入 m,后跟主题菜单的名称而进入该主题。例如,你可以键入 m,然后再键入 gcc 而进
进入 gcc 主题中。
如果你要在主题之间跳转,则必须记住如下的几个命令键:
* n:跳转到该节点的下一个节点;
* p:跳转到该节点的上一个节点;
* m: 指定菜单名而选择另外一个节点;
* f:进入交叉引用主题;
* l:进入该窗口中的最后一个节点;
* TAB:跳转到该窗口的下一个超文本链接;
* RET:进入光标处的超文本链接;
* u:转到上一级主题;
* d:回到 info 的初始节点目录;
* h:调出 info 教程;
* q:退出 info。

#DEMO#

3. HOW-TO

可供用户参考的联机文档的另一种形式是 HOWTO 文件,这些文件位于系统的 /usr/doc/HOWTO 目录下。 HOWTO 文件的文件名都有一个 -HOWTO 后缀,并且都是文本文件。

每一个 HOWTO 文件包含 Linux 某一方面的信息,例如它支持的硬件或如何建立一个引导盘。

要想查看这些文件,进入 /usr/doc/HOWTO 目录,使用 more 命令,具体形式如下:
$ cd /usr/doc/HOWTO; more topic-name-HOWTO

另外,HOWTO 文档还有其他格式的文件,例如 HTML 和 PS 等,保存在 /usr/doc/HOWTO/other-formats 下。

4. 其他

Linux 的内核文档一般包含在内核源代码中,目录如下:/usr/src/linux-2.x.x/Documentation

/usr/doc 目录下包含有大量与特定软件或函数库相关的说明性文档。

1.4.4  C 语言编程风格

编写这一小节的目的是提醒大家在编程过程中注意编程风格。如果你只是在编写一些小的练习程序,程序 只有一两百行长的话,编程风格可能并不重要。然而,如果你和许多人一起进行开发工作,或者,你希望 在过一段时间之后,还能够正确理解自己的程序的话,就必须养成良好的编程习惯。在诸多编程习惯当中 ,编程风格是最重要的一项内容。

良好的编程风格可以在许多方面帮助开发人员。如果你阅读过 Linux 内核源代码的话,可能会对程序的 优美编排所倾倒。良好的编程风格可以增加代码的可读性,并帮助你理清头绪。如果程序非常杂乱,大 概看一眼就该让你晕头转向了。编程风格最能体现一个程序员的综合素质。

许多读者可能对 Windows 所推崇的匈牙利命名法很熟悉。这种方法定义了非常复杂的函数、变量、类型 等的命名方法,典型的命名方法是采用大小写混写的方式,对于变量名称,则采用添加前缀的办法来表示 其类型,例如:
char szBuffer[20];
int nCount;
利用 sz 和 n 分别代表字符串和整数。为了表示一个变量名称,采用如下的变量名称是可能的:
int iThisIsAVeryLongVariable;

在 Linux 中,我们经常看到的是定义非常简单的函数接口和变量名称。在 Linux 内核的源代码中,可以看 到 Linux 内核源代码的编码风格说明(/ Documentation/CodingStyle)。UNIX 系统的一个 特点是设计精巧,并遵守积木式原则。C 语言最初来自 UNIX 操作系统,与 UNIX 的设计原则一样, C 语言被广泛认可和使用的一个重要原因是它的灵活性以及简洁性。因此,在利用 C 语言编写程序时, 始终应当符合其简洁的设计原则,而不应当使用非常复杂的变量命名方法。Linus 为 Linux 内核定义 的 C 语言编码风格要点如下:

  1. 缩进时,使用长度为 8 个字符宽的 Tab 键。如果程序的缩进超过 3 级,则应考虑重新设计程序。
  2. 大括号的位置。除函数的定义体外,应当将左大括号放在行尾,而将右大括号放在行首。 函数的定义体应将左右大括号放在行首。如下所示:
    int function(int x, int y)
    {
            if (x == y) {
                    ...
            } else if (x > y) {
                    ...
            } else {
                    ...
            }

            return 0;
    }
  3. 应采用简洁的命名方法。对变量名,不赞成使用大小写混写的形式,但鼓励使用描述性的名称; 尽可能不使用全局变量;不采用匈牙利命名法表示变量的类型;采用短小精悍的名称表示局部变量; 保持函数短小,从而避免使用过多的局部变量。
  4. 保持函数短小精悍。
  5. 不应过分强调注释的作用,应尽量采用好的编码风格而不是添加过多的注释。

1.4.5  库和头文件的保存位置

1. 函数库

  • /lib:系统必备共享库
  • /usr/lib:标准共享库和静态库
  • /usr/i486-linux-libc5/lib:libc5 兼容性函数库
  • /usr/X11R6/lib:X11R6 的函数库
  • /usr/local/lib:本地函数库

2. 头文件

  • /usr/include:系统头文件
  • /usr/local/include:本地头文件

1.4.6  共享库及其相关配置

  • /etc/ld.so.conf:包含共享库的搜索位置
  • ldconfig:共享库管理工具,一般在更新了共享库之后要运行该命令
  • ldd:可查看可执行文件所使用的共享库





Previous Next Contents
2018-11-28 00:01:25 butterfly5211314 阅读数 980

环境(centos 6.10):

$ uname -r
2.6.32-754.el6.x86_64

函数定义:

// /usr/include/libgen.h
extern char *__xpg_basename (char *__path) __THROW;
#define basename        __xpg_basename

这个basename函数可以返回路径最后一个路径分隔符之后的内容,
比如basename("/usr/local/abc") 返回 abc.

调用示例如下:

#include <stdio.h>
#include <libgen.h>

int main(int argc, char *argv[]) {
    char* files[] = {
        "/usr/local/nginx/conf/nginx.conf",
        "./a.out",
        "/usr/include/libgen.h",
        NULL
    };

    char **p = files;

    while (*p) {
        printf("basename(\"%s\")=%s\n", *p, basename(*p));
        *p++;
    }
    return 0;
}

编译运行:

$ gcc basename.c
$ ./a.out
basename("/usr/local/nginx/conf/nginx.conf")=nginx.conf
basename("./a.out")=a.out
basename("/usr/include/libgen.h")=libgen.h

直观点理解, 就是输出“文件名”。

shell下有个命令, 也叫basename, 用法一样, 示例:

$ for i in /usr/local/nginx/conf/nginx.conf ./a.out /usr/include/libgen.h; do basename $i; done
nginx.conf
a.out
libgen.h

还有个叫dirname的函数, 也在libgen.h中:

extern char *dirname (char *__path) __THROW;

dirname用法和basename一样, 不过它返回的是除去"文件名"之外的目录名. 同名的命令dirname也是同样的功能, 一看就明白:

$ for i in /usr/local/nginx/conf/nginx.conf ./a.out /usr/include/libgen.h; do dirname $i; done
/usr/local/nginx/conf
.
/usr/include

这个dirname命令有个惯用法, 就是获取当前脚本所在路径:

scriptDir=$(cd `dirname $0`; pwd)

这样不管代在哪里执行这个脚本, $scriptDir的值都可以取得你执行时的目录名. 非常实用.

欢迎补充指正!

2018-12-11 16:58:32 Ethan95 阅读数 80

6.1 在/usr/include/x86_64-linux-gnu/sys/select.h中查看fd_set的定义

/* fd_set for select and pselect.  */
typedef struct
  {
    /* XPG4.2 requires this member name.  Otherwise avoid the name
       from the global namespace.  */
#ifdef __USE_XOPEN
    __fd_mask fds_bits[__FD_SETSIZE / __NFDBITS];
# define __FDS_BITS(set) ((set)->fds_bits)
#else
    __fd_mask __fds_bits[__FD_SETSIZE / __NFDBITS];
# define __FDS_BITS(set) ((set)->__fds_bits)
#endif
  } fd_set;

在c语言中,结构体是可以直接使用等号进行赋值的。

6.2
还没讲过套接字阻塞的概念,看了下答案,大概是:
如果要写的大小大于缓冲区,且套接字是阻塞的,则将会阻塞直到写操作完成。

6.3
加上else以后,如果sockfd和fd都是可读的,处理完套接字就不会处理后面的可读缓冲区了。

6.4
加上下面的代码

include        <sys/resource.h>
...
        struct rlimit           limit;

        bzero(&limit,sizeof(limit));
        if(getrlimit(RLIMIT_NOFILE,&limit)<0)
                printf("error getting maxfile.\n");
        else{
                printf("soft limit: %lu, hard limit: %lu\n",limit.rlim_cur,limit.rlim_max);
                limit.rlim_cur=limit.rlim_max;
                if(setrlimit(RLIMIT_NOFILE,&limit)<0){
                        printf("set error\n");
                }
                if(getrlimit(RLIMIT_NOFILE,&limit)<0)
                        printf("error getting maxfile.\n");
                else{
                        printf("soft limit: %lu, hard limit: %lu\n",limit.rlim_cur,limit.rlim_max);
                }
        }

...

运行结果:
在这里插入图片描述
参考:进程环境之getrlimit和setrlimit函数

6.6
shutdown立即发送FIN,而close只有引用计数为0的时候才发送

6.7 不懂,mark
服务器程序会停止运行

2008-10-13 22:07:00 skylj0209 阅读数 9585

标准 (ANSI C, POSIX, SVID, XPG, ...)

  • ANSI C:这一标准是 ANSI(美国国家标准局)于 1989 年制定的 C 语言标准。 后来被 ISO(国际标准化组织)接受为标准,因此也称为 ISO C。
    ANSI C 的目标是为各种操作系统上的 C 程序提供可移植性保证,而不仅仅限于 UNIX。 该标准不仅定义了 C 编程语言的语发和语义,而且还定义了一个标准库。这个库可以根据 头文件划分为 15 个部分,其中包括:字符类型 (<ctype.h>)、错误码 (<errno.h>)、 浮点常数 (<float.h>)、数学常数 (<math.h>)、标准定义 (<stddef.h>)、 标准 I/O (<stdio.h>)、工具函数 (<stdlib.h>)、字符串操作 (<string.h>)、 时间和日期 (<time.h>)、可变参数表 (<stdarg.h>)、信号 (<signal.h>)、 非局部跳转 (<setjmp.h>)、本地信息 (<local.h>)、程序断言 (<assert.h>) 等等。
  • POSIX:该标准最初由 IEEE 开发的标准族,部分已经被 ISO 接受为国际标准。该标准的具体内容 见 1.1.3。POSIX.1 和 POSIX.2 分别定义了 POSIX 兼容操作系统的 C 语言系统接口 以及 shell 和工具标准。这两个标准是通常提到的标准。POSIX 表示可移植操作系统接口(Portable Operating System Interface ,缩写为 POSIX 是为了读音更 像 UNIX)。电气和电子工程师协会(Institute of Electrical and Electronics Engineers,IEEE) 最初开发 POSIX 标准,是为了提高 UNIX 环境下应用程序的可移植性。然而,POSIX 并不局限于 UNIX。 许多其它的操作系统,例如 DEC OpenVMS 和 Microsoft Windows NT,都支持 POSIX 标准,尤其是 IEEE Std. 1003.1-1990(1995 年修订)或 POSIX.1,POSIX.1 提供了源代码级别的 C 语言应用编程 接口(API)给操作系统的服务程序,例如读写文件。POSIX.1 已经被国际标准化组织(International Standards Organization,ISO)所接受,被命名为 ISO/IEC 9945-1:1990 标准。

  • SVID:System V 的接口描述。System V 接口描述(SVID)是描述 AT&&;T Unix System V 操作 系统的文档,是对 POSIX 标准的扩展超集。
  • XPG:X/Open 可移植性指南。X/Open 可移植性指南(由 X/Open Company, Ltd.出版), 是比 POSIX 更为一般的标准。X/Open 拥有 Unix 的版权,而 XPG 则指定成为 Unix 操作系统必须满足的要求。
Glibc

众所周知,C 语言并没有为常见的操作,例如输入/输出、内存管理,字符串操作等提供内置的支持。 相反,这些功能一般由标准的“函数库”来提供。GNU 的 C 函数库,即 glibc,是 Linux 上最重要的 函数库,它定义了 ISO C 标准指定的所有的库函数,以及由 POSIX 或其他 UNIX 操作系统 统变种指定的附加特色,还包括有与 GNU 系统相关的扩展。目前,流行的 Linux 系统使用 glibc 2.0 以上的版本。glibc 基于如下标准:

  • ISO C: C 编程语言的国际标准,即 ANSI C。
  • POSIX:GNU C 函数库实现了 ISO/IEC 9945-1:1996 (POSIX 系统应用程序编程接口, 即 POSIX.1)指定的所有函数。该标准是对 ISO C 的扩展,包括文件系统接口原 语、设备相关的终端控制函数以及进程控制函数。同时,GUN C 函数库还支持部分由 ISO/IEC 9945-2:1993(POSIX Shell 和 工具标准,即 POSIX.2)指定的函数, 其中包括用于处理正则表达式和模式匹配的函数。
  • Berkeley Unix:BSD 和 SunOS。GNU C 函数库定义了某些 UNIX 版本中尚未标准化的函数, 尤其是 4.2 BSD, 4.3 BSD, 4.4 BSD Unix 系统(即“Berkeley Unix”)以及“SunOS” (流行的 4.2 BSD 变种,其中包含有某些 Unix System V 的功能)。BSD 函数包括 符号链接、select 函数、BSD 信号处理函数以及套接字等等。
  • SVID:System V 的接口描述。GNU C 函数库定义了大多数由 SVID 指定而未被 ISO C 和 POSIX 标准指定的函数。来自 System V 的支持函数包括进程间通信和共享内存、 hsearch 和 drand48 函数族、fmtmsg 以及一些数学函数。
  • XPG:X/Open 可移植性指南。GNU C 函数库遵循 X/Open 可移植性指南(Issue 4.2) 以及所有的 XSI(X/Open 系统接口)兼容系统的扩展,同时也遵循所有的 X/Open Unix 扩展。

系统调用

系统调用是操作系统提供给外部程序的接口。在 C 语言中,操作系统的系统调用通常通过 函数调用的形式完成,这是因为这些函数封装了系统调用的细节,将系统调用的入口、参数以及 返回值用 C 语言的函数调用过程实现。在 Linux 系统中,系统调用函数定义在 glibc 中

谈到系统调用时,需要注意如下几点:

  • 系统调用函数通常在成功时返回 0 值,不成功时返回非零值。如果要检查失败原因,则 要判断 errno 这个全局变量的值,errno 中包含有错误代码。
  • 许多系统调用的返回数据通常通过引用参数传递。这时,需要在函数参数中传递一个 缓冲区地址,而返回的数据就保存在该缓冲区中。
  • 不能认为系统调用函数就要比其他函数的执行效率高。要注意,系统调用是一个非常耗时 的过程。

有关系统调用我们将在以后详细讲述。

在线文档 (man, info, HOW-TO, ...)

1. man

man,即 manunal,是 UNIX 系统手册的电子版本。根据习惯,UNIX 系统手册通常分为 不同的部分(或小节,即 section),每个小节阐述不同的系统内容。目前的小节划分如下:

  1. 命令:普通用户命令
  2. 系统调用:内核接口
  3. 函数库调用:普通函数库中的函数
  4. 特殊文件:/dev 目录中的特殊文件
  5. 文件格式和约定:/etc/passwd 等文件的格式
  6. 游戏。
  7. 杂项和约定:标准文件系统布局、手册页结构等杂项内容
  8. 系统管理命令。
  9. 内核例程:非标准的手册小节。便于 Linux 内核的开发而包含

其他手册小节:

  • l: PostgreSQL 数据库命令
  • n: TCL/TK 命令

手册页一般保存在 /usr/man 目录下,其中每个子目录(如 man1, man2, ..., manl, mann) 包含不同的手册小节。使用 man 命令查看手册页。

man 命令行:
man [-acdfFhkKtwW] [-m system] [-p string] [-C config_file] [-M path] [-P pager] [-S section_list] [section] name

常用命令行:
$ man open
$ man 7 man
$ man ./myman.3

2. info

Linux 中的大多数软件开发工具都是来自自由软件基金会的 GNU 项目,这些工具软件 件的在线文档都以 info 文件的形式存在。info 程序是 GNU 的超文本帮助系统。

info 文档一般保存在 /usr/info 目录下,使用 info 命令查看 info 文档。

要运行 info,可以在 shell 提示符后输入 info,也可以在 GNU 的 emacs 中键入 Esc-x 后跟 info。

info 帮助系统的初始屏幕显示了一个主题目录,你可以将光标移动到带有 * 的主题菜单上面,然后按回车键
进入该主题,也可以键入 m,后跟主题菜单的名称而进入该主题。例如,你可以键入 m,然后再键入 gcc 而进
进入 gcc 主题中。
如果你要在主题之间跳转,则必须记住如下的几个命令键:
* n:跳转到该节点的下一个节点;
* p:跳转到该节点的上一个节点;
* m: 指定菜单名而选择另外一个节点;
* f:进入交叉引用主题;
* l:进入该窗口中的最后一个节点;
* TAB:跳转到该窗口的下一个超文本链接;
* RET:进入光标处的超文本链接;
* u:转到上一级主题;
* d:回到 info 的初始节点目录;
* h:调出 info 教程;
* q:退出 info。

#DEMO#

3. HOW-TO

可供用户参考的联机文档的另一种形式是 HOWTO 文件,这些文件位于系统的 /usr/doc/HOWTO 目录下。 HOWTO 文件的文件名都有一个 -HOWTO 后缀,并且都是文本文件。

每一个 HOWTO 文件包含 Linux 某一方面的信息,例如它支持的硬件或如何建立一个引导盘。

要想查看这些文件,进入 /usr/doc/HOWTO 目录,使用 more 命令,具体形式如下:
$ cd /usr/doc/HOWTO; more topic-name-HOWTO

另外,HOWTO 文档还有其他格式的文件,例如 HTML 和 PS 等,保存在 /usr/doc/HOWTO/other-formats 下。

4. 其他

Linux 的内核文档一般包含在内核源代码中,目录如下:/usr/src/linux-2.x.x/Documentation

/usr/doc 目录下包含有大量与特定软件或函数库相关的说明性文档。


库和头文件的保存位置

1. 函数库

  • /lib:系统必备共享库
  • /usr/lib:标准共享库和静态库
  • /usr/i486-linux-libc5/lib:libc5 兼容性函数库
  • /usr/X11R6/lib:X11R6 的函数库
  • /usr/local/lib:本地函数库

2. 头文件

  • /usr/include:系统头文件
  • /usr/local/include:本地头文件


POSIX 现在已经发展成为一个非常庞大的标准族,某些部分正处在开发过程中。表 1-1 给出了 POSIX 标准的几个 重要组成部分。POSIX 与 IEEE 1003 和 2003 家族的标准是可互换的。除 1003.1 之外,1003 和 2003 家族也包括在表中。

1-1 POSIX 标准的重要组成部分

1003.0

管理 POSIX 开放式系统环境(OSE)。IEEE 在 1995 年通过了这项标准。 ISO 的版本是 ISO/IEC 14252:1996。

1003.1

被广泛接受、用于源代码级别的可移植性标准。1003.1 提供一个操作系统的 C 语言应 用编程接口(API)。IEEE 和 ISO 已经在 1990 年通过了这个标准,IEEE 在 1995 年 重新修订了该标准。

1003.1b

一个用于实时编程的标准(以前的 P1003.4 或 POSIX.4)。这个标准在 1993 年 被 IEEE 通过,被合并进 ISO/IEC 9945-1。

1003.1c

一个用于线程(在一个程序中当前被执行的代码段)的标准。以前是 P1993.4 或 POSIX.4 的一部分,这个标准已经在 1995 年被 IEEE 通过,归入 ISO/IEC 9945-1:1996。

1003.1g

一个关于协议独立接口的标准,该接口可以使一个应用程序通过网络与另一个应用程序 通讯。 1996 年,IEEE 通过了这个标准。

1003.2

一个应用于 shell 和 工具软件的标准,它们分别是操作系统所必须提供的命令处理器 和工具程序。 1992 年 IEEE 通过了这个标准。ISO 也已经通过了这个标准(ISO/IEC 9945-2:1993)。

1003.2d

改进的 1003.2 标准。

1003.5

一个相当于 1003.1 的 Ada 语言的 API。在 1992 年,IEEE 通过了这个标准。 并在 1997 年对其进行了修订。ISO 也通过了该标准。

1003.5b

一个相当于 1003.1b(实时扩展)的 Ada 语言的 API。IEEE 和 ISO 都已经通过了 这个标准。ISO 的标准是 ISO/IEC 14519:1999。

1003.5c

一个相当于 1003.1q(协议独立接口)的 Ada 语言的 API。在 1998 年, IEEE 通过了这个标准。ISO 也通过了这个标准。

1003.9

一个相当于 1003.1 的 FORTRAN 语言的 API。在 1992 年,IEEE 通过了这个标准, 并于 1997 年对其再次确认。ISO 也已经通过了这个标准。

1003.10

一个应用于超级计算应用环境框架(Application Environment Profile,AEP)的标准。 在 1995 年,IEEE 通过了这个标准。

1003.13

一个关于应用环境框架的标准,主要针对使用 POSIX 接口的实时应用程序。 在 1998 年,IEEE 通过了这个标准。

1003.22

一个针对 POSIX 的关于安全性框架的指南。

1003.23

一个针对用户组织的指南,主要是为了指导用户开发和使用支持操作需求的 开放式系统环境(OSE)框架

2003

针对指定和使用是否符合 POSIX 标准的测试方法,有关其定义、一般需求和指导方针的 一个标准。在 1997 年,IEEE 通过了这个标准。

2003.1

这个标准规定了针对 1003.1 的 POSIX 测试方法的提供商要提供的一些条件。 在 1992 年,IEEE 通过了这个标准。

2003.2

一个定义了被用来检查与 IEEE 1003.2(shell 和 工具 API)是否符合的测试方法的 标准。在 1996 年,IEEE 通过了这个标准。

除了 1003 和 2003 家族以外,还有几个其它的 IEEE 标准,例如 1224 和 1228,它们 也提供开发可移植应用程序的 API。要想得到关于 IEEE 标准的最新信息,可以访问 IEEE 标准的主页,网址是 http://standard.ieee.org/。 有关 POSIX 标准的概述信息,请访问 Web 站点 http://standards.ieee.org/reading/ieee/stad_public/description/posix/


linux下c编程常识

阅读数 3

Linux编程常识

阅读数 3

Linux 的编程常识

阅读数 361

没有更多推荐了,返回首页