⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basic.html

📁 此源码是清华大学对于Linux作的系列讲座之一;其中主要讲解了如何正确的使用Linux操作系统。
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
    <TITLE>Linux 的编程常识</TITLE>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312-80">
    <META NAME="GENERATOR" CONTENT="StarOffice/5.1 (Linux)">
    <META NAME="AUTHOR" CONTENT="Yongming Wei">
    <META NAME="CREATED" CONTENT="20000329;17342600">
    <META >
    <STYLE>
    <!--
        H1 { color: #ffff00 }
        H2 { color: #ffff00 }
        H3 { color: #ff00ff }
        H4 { color: #ffff00 }
        TD P { color: #b880b8 }
        LI { color: #ffffff }
        P { color: #00ffff }
        A:link { color: #00b8ff }
        A:visited { color: #ff3366 }
    -->
    </STYLE>
</HEAD>
<BODY TEXT="#ffff00" LINK="#00b8ff" VLINK="#ff3366" BACKGROUND="../images/velvet.jpg">

<A HREF="others.html"><IMG SRC="prev.gif" ALT="Previous"></A>
<A HREF="scenario.html"><IMG SRC="next.gif" ALT="Next"></A>
<A HREF="index.html"><IMG SRC="toc.gif" ALT="Contents"></A>

<H1 ALIGN=CENTER>1.4&nbsp;&nbsp;Linux 的编程常识<BR><BR>
</H1>

<UL>
    <LI><P>标准 (ANSI C, POSIX, SVID, XPG, ...)</LI>
    <LI><P>函数库和系统调用</LI>
    <LI><P>在线文档 (man, info, HOW-TO, ...)</LI>
    <LI><P>C 语言编程风格</LI>
    <LI><P>库和头文件的保存位置</LI>
    <LI><P>共享库及其相关配置</LI>
</UL>

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

<H3>1.4.2&nbsp;&nbsp;函数库和系统调用</H3>

<H4>1. glibc</H4>
<P>
众所周知,C 语言并没有为常见的操作,例如输入/输出、内存管理,字符串操作等提供内置的支持。
相反,这些功能一般由标准的“函数库”来提供。GNU 的 C 函数库,即 glibc,是 Linux 上最重要的
函数库,它定义了 ISO C 标准指定的所有的库函数,以及由 POSIX 或其他 UNIX 操作系统
统变种指定的附加特色,还包括有与 GNU 系统相关的扩展。目前,流行的 Linux 系统使用 glibc 2.0 
以上的版本。glibc 基于如下标准:</P>
<UL>
    <LI>ISO C: C 编程语言的国际标准,即 ANSI C。</LI>
    <LI>POSIX:GNU C 函数库实现了 ISO/IEC 9945-1:1996 (POSIX 系统应用程序编程接口,
        即 POSIX.1)指定的所有函数。该标准是对 ISO C 的扩展,包括文件系统接口原
        语、设备相关的终端控制函数以及进程控制函数。同时,GUN C 函数库还支持部分由
        ISO/IEC 9945-2:1993(POSIX Shell 和 工具标准,即 POSIX.2)指定的函数,
        其中包括用于处理正则表达式和模式匹配的函数。</LI>
    <LI>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 信号处理函数以及套接字等等。</LI>
    <LI>SVID:System V 的接口描述。GNU C 函数库定义了大多数由 SVID 指定而未被 ISO C 
        和 POSIX 标准指定的函数。来自 System V 的支持函数包括进程间通信和共享内存、
        hsearch 和 drand48 函数族、fmtmsg 以及一些数学函数。</LI>
    <LI>XPG:X/Open 可移植性指南。GNU C 函数库遵循 X/Open 可移植性指南(Issue 4.2)
        以及所有的 XSI(X/Open 系统接口)兼容系统的扩展,同时也遵循所有的 X/Open Unix 
        扩展。</LI>
</UL>

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

<H4>3. 系统调用</H4>
<P>
系统调用是操作系统提供给外部程序的接口。在 C 语言中,操作系统的系统调用通常通过
函数调用的形式完成,这是因为这些函数封装了系统调用的细节,将系统调用的入口、参数以及
返回值用 C 语言的函数调用过程实现。在 Linux 系统中,系统调用函数定义在 glibc 中。 </P>
<P>
谈到系统调用时,需要注意如下几点:</P>
<UL>
    <LI>系统调用函数通常在成功时返回 0 值,不成功时返回非零值。如果要检查失败原因,则
        要判断 errno 这个全局变量的值,errno 中包含有错误代码。</LI>
    <LI>许多系统调用的返回数据通常通过引用参数传递。这时,需要在函数参数中传递一个
        缓冲区地址,而返回的数据就保存在该缓冲区中。</LI>
    <LI>不能认为系统调用函数就要比其他函数的执行效率高。要注意,系统调用是一个非常耗时
        的过程。</LI>
</UL>

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

<H3>1.4.3&nbsp;&nbsp;在线文档 (man, info, HOW-TO, ...)</H3>
<H4>1. man</H4>
<P>
man,即 manunal,是 UNIX 系统手册的电子版本。根据习惯,UNIX 系统手册通常分为
不同的部分(或小节,即 section),每个小节阐述不同的系统内容。目前的小节划分如下:
</P>

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

<P>
其他手册小节:</P>
<UL>
     <LI>l: PostgreSQL 数据库命令</LI>
     <LI>n: TCL/TK 命令</LI>
</UL>

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

<P>
man 命令行:<BR>
man  [-acdfFhkKtwW]  [-m  system]  [-p  string]  [-C config_file] [-M path] [-P
       pager] [-S section_list] [section] name
<P>
常用命令行:<BR>
$ man open<BR>
$ man 7 man<BR>
$ man ./myman.3<BR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -