Your SlideShare is downloading. ×
谨将我们的工作献给
即将毕业离校的兄弟们 — 林晓鑫、刘德超、黄巍、周蓝
  珺、胡禹轩、王新喜、何春晓、崔剑、李浩。
            以及

      潘海东即将出世的小 Baby!




            – II –
0




                                   译者序
                                    LSP) 的 文         工作            实
     Lin...
0




                       版权声明
                                 文的   工作     工业
      Linux System Programming
         ...
目录

译者序. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....
第 2 章 文件 I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....
2.11内 内 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...
第 4 章 高级文件 I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....
进程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...
6.4 处理             ............................................................                                           ...
7.7.3 inotify 件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....
第 9 章 信号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....
时间. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
...
附录 B 参考书目 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...
1




                              第 1 章 简介和主要概念

                         的                             程的              ...
1


    程           程                    程 (或         相                            件               的        。
            ...
1


        的        调                                          相                        的 Windows                 上      ...
1


              调                 程                                 工       。

1.1.4 C 编译器

                            ...
1


            实       的    子                                                            实
                              ...
1


的                                             上                                     们。 Linux
                         ...
1


的                         扩展                的 POSIX.1              提      的       能 –APUE S2.2.3        。

1.3.2 C 语言标...
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
LSP Cn Alpha(Revision 77)
Upcoming SlideShare
Loading in...5
×

LSP Cn Alpha(Revision 77)

3,528

Published on

Linux System Program

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,528
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
211
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "LSP Cn Alpha(Revision 77)"

  1. 1. 谨将我们的工作献给 即将毕业离校的兄弟们 — 林晓鑫、刘德超、黄巍、周蓝 珺、胡禹轩、王新喜、何春晓、崔剑、李浩。 以及 潘海东即将出世的小 Baby! – II –
  2. 2. 0 译者序 LSP) 的 文 工作 实 Linux System Prorgramming ( 工业 理 IBM 的 。 工作的同 的 同 。 们 林晓鑫、王 、崔 春、 、何春晓、 、李 、 、 、 、 。 的 文献 SMS@lilacbbs.com 的 王 。刘文 、王 、刘德超、 、王新喜 同 校工作。 的 校 。 工业 文 作 的 工作 李 。 TeX 的 工作 文 进 。 LSP 内 布 原 IBM ( 工程 ) 晓( )的 们 SUN 的业 时间对 进 的校 提出 的 。 们的 的同 。 们示 。 程 的 Harbin Linux User Group 们 示 。 , 程方 的 工作以 的 的 。 存 何 方式 我们 : Website : http://www.footoo.org Twitter : http://twitter.com/cliffwoo Email :cliffwoo@gmail.com 或 cliffwoo@footoo.org Google Groups :http://groups.google.com/group/lspcn/ 工业 2009 4 30 – III –
  3. 3. 0 版权声明 文的 工作 工业 Linux System Programming 的 。文 程的 IBM , 业 。 Linux System Prorgramming 的 作 及原出 文 程的 。 原 作 及出 的出 、 、 作 的 。 – IV –
  4. 4. 目录 译者序. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . III 版权声明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IV 第 1 章 简介和主要概念. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1 1 调 ............................................................ 1.1.1 2 1.1.2 调 调 ....................................................... 3 1.1.3 C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1.4 C ............................................................ 4 1.2 API ABI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2.1 API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2.2 ABI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.3 ..................................................................... 5 SUS 的 1.3.1 POSIX ............................................... 6 1.3.2 C .......................................................... 7 1.3.3 Linux ........................................................ 7 1.3.4 ......................................................... 8 1.4 Linux 程 .......................................................... 8 1.4.1 文件 文件 .................................................... 8 文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.2 9 1.4.3 ......................................................... 10 1.4.4 .............................................................. 11 1.4.5 ............................................................ 12 文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.6 12 1.4.7 文件 空间 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.4.8 进程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.9 15 1.4.10 进程 ............................................................ 16 1.4.11 ............................................................ 16 1.4.12 ................................................................. 17 1.4.13 ................................................................. 18 1.4.14 进程间 ......................................................... 18 1.4.15 文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 处理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.16 19 程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5 22 –V–
  5. 5. 第 2 章 文件 I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1 24 调 ..................................................... 2.1.1 open() 24 2.1.2 新文件 ....................................................... 26 2.1.3 新文件 ......................................................... 26 2.1.4 creat() .......................................................... 28 2.1.5 .................................................... 29 read() 读 文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 29 2.2.1 .............................................................. 30 2.2.2 读 的 .................................................... 31 读. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.3 32 2.2.4 ......................................................... 33 2.2.5 read() 小 ..................................................... 33 write() 写 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 34 写 .............................................................. 2.3.1 35 式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.2 36 写. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.3 36 2.3.4 ......................................................... 36 2.3.5 write() 小 ..................................................... 37 2.3.6 write() 的 ....................................................... 37 2.4 同步 I/O. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.4.1 fsync() fdatasync() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.4.2 .................................................... 39 2.4.3 sync(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.4.4 O SYNC ....................................................... 41 2.4.5 O DSYNC O RSYNC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2.5 I/O. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.6 42 2.6.1 .............................................................. 43 2.7 lseek() ........................................................... 44 2.7.1 文件 进 ............................................. 45 2.7.2 .............................................................. 46 2.7.3 ................................................................. 46 读写. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.8 46 2.8.1 .............................................................. 47 文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.9 47 2.10I/O ............................................................. 49 2.10.1 select() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 2.10.2 .................................................... 52 2.10.3 poll() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 2.10.4 poll() select(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 – VI –
  6. 6. 2.11内 内 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 文件 2.11.1 ....................................................... 62 2.11.2 页 存 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 2.11.3 页 写 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 2.12 ..................................................................... 65 第 3 章 缓冲输入输出 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 3.1 I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 小 .............................................................. 3.1.1 67 3.1.2 I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 3.1.3 文件 ............................................................ 68 文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 69 式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 69 文件 文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.2 70 3.3 ................................................................... 71 的 ....................................................... 3.3.1 71 读 3.4 ......................................................... 71 3.4.1 单 读 ......................................................... 71 3.4.2 .................................................. 72 的读 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.3 72 3.4.4 读 .................................................... 73 3.4.5 读 进 文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 写 3.5 ............................................................ 75 3.5.1 对 的 ......................................................... 75 3.5.2 写 单 ....................................................... 76 3.5.3 写 ......................................................... 76 3.5.4 写 进 .................................................... 77 I/O 示 程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.5 77 3.6 ................................................................... 79 3.6.1 .................................................... 80 3.7 .............................................................. 81 文件 3.8 ......................................................... 82 的文件 3.9 .................................................. 83 3.10 ................................................................. 83 3.11 程 ................................................................. 85 文件 3.11.1 ....................................................... 85 操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.11.2 86 I/O 的 3.12对 ....................................................... 87 3.13 ..................................................................... 88 – VII –
  7. 7. 第 4 章 高级文件 I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 4.1 散布 / 聚集 I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 4.1.1 readv() writev() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 4.2 Event Poll ........................................................... 96 新的 epoll 实 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1 96 4.2.2 epoll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Epoll 件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.3 99 件 件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.4 101 4.3 存 映射. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 4.3.1 mmap() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 4.3.2 munmap(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 4.3.3 存 映射 子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 4.3.4 mmap() 的 ...................................................... 108 4.3.5 mmap() 的 ...................................................... 109 4.3.6 调 映射的 小 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 映射 的 4.3.7 ............................................... 110 映射 同步文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.8 111 4.3.9 映射提示. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 文件 I/O 提示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4 114 4.4.1 posix fadvise() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 调 ................................................ 4.4.2 readahead() 116 实 的操作提示. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.3 116 4.5 同步 (Synchronized) 同步 (Synchronous) 及异步 ( Asynchronous) 操作 . . 117 4.5.1 异步 I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 4.6 I/O 调 I/O 性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 4.6.1 ............................................................ 120 4.6.2 调 的 能....................................................... 121 进读 4.6.3 ......................................................... 122 的 I/O 调 4.6.4 ......................................... 125 I/O 性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6.5 125 4.7 ..................................................................... 132 第 5 章 进程管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 5.1 进程 ID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 进程 ID. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.1 134 5.1.2 进程 ............................................................ 134 5.1.3 pid t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 进程 ID 进程的 ID. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.4 135 新进程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 136 调 .................................................. 5.2.1 exec 136 调 ...................................................... 5.2.2 fork() 139 – VIII –
  8. 8. 进程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 143 进程的方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.1 144 5.3.2 atexit(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 5.3.3 on exit( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 5.3.4 SIGCHLD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 的子进程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4 147 进程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.1 150 子进程的方 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.2 152 BSD 的 wait3() wait4() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.3 153 新进程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.4 155 进程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.5 158 5.5 ................................................................. 158 实 ( )ID、 效 存设 的 5.5.1 ( )ID ( )ID . . . . . . 159 实 存设 的 5.5.2 ( )ID ( )ID . . . . . . . . . . . . . . . . . . . . 160 效 5.5.3 ID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 ID 的方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5.4 BSD ID 161 ID 的方式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5.5 HP-UX ID 162 操作 ID 的 方 ...................................... 5.5.6 ID 163 对 存设 的 ID 的 5.5.7 ....................................... 163 5.5.8 ID ID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 进程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6 164 相的 调 ............................................. 5.6.1 165 进程 相 的 调 ........................................... 5.6.2 167 的进程 5.6.3 .................................................. 168 进程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.7 169 5.8 ..................................................................... 171 第 6 章 高级进程管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 6.1 进程调 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 6.1.1 O ........................................................... 173 6.1.2 时间 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 进程 Vs. 处理 进程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.3 I/O 174 调 ............................................................ 6.1.4 175 程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.5 175 出处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 176 理 6.2.1 ............................................................ 176 出处理 方 的 6.2.2 ...................................... 177 6.3 进程 .............................................................. 178 6.3.1 nice() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 6.3.2 getpriority() setpriority(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 6.3.3 I/O .......................................................... 181 – IX –
  9. 9. 6.4 处理 ............................................................ 182 6.4.1 sched getaffinity() sched setaffinity() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 6.5 实时 ................................................................. 185 实时 6.5.1 ....................................................... 186 时 6.5.2 ............................................. 186 6.5.3 Linux 的实时 ................................................... 187 6.5.4 Linux 调 ............................................ 188 6.5.5 设 调 ....................................................... 192 6.5.6 sched rr get interval() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 实时进程的 提 ........................................... 6.5.7 197 性 .............................................................. 6.5.8 197 6.6 ................................................................. 200 6.6.1 ............................................................ 201 设 6.6.2 ............................................... 204 第 7 章 文件与目录管理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 7.1 文件及 ......................................................... 207 7.1.1 stat ....................................................... 207 7.1.2 ................................................................. 211 7.1.3 .............................................................. 213 7.1.4 扩展属性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 7.2 ..................................................................... 223 工作 7.2.1 ....................................................... 224 7.2.2 ............................................................ 229 7.2.3 ............................................................ 230 7.2.4 读 内 ....................................................... 231 7.3 ..................................................................... 235 7.3.1 .............................................................. 236 7.3.2 ............................................................ 237 7.3.3 ............................................................ 239 文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4 240 7.4.1 ................................................................. 240 7.4.2 ................................................................. 241 7.5 设备 ................................................................. 242 设备 7.5.1 ....................................................... 243 7.5.2 ....................................................... 243 7.6 ................................................................. 244 文件 件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.7 246 7.7.1 inotify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 7.7.2 ................................................................. 247 –X–
  10. 10. 7.7.3 inotify 件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 7.7.4 ....................................................... 252 7.7.5 inotify .................................................... 253 件 小.................................................. 7.7.6 254 inotify 实 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.7.7 255 第 8 章 内存管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 8.1 进程 空间. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 8.1.1 页 页 调 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 8.1.2 存 ......................................................... 257 内存 8.2 ............................................................ 258 8.2.1 ............................................................ 260 8.2.2 调 内存 小 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 内存的 8.2.3 .................................................... 264 8.2.4 对 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 段的 理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3 270 存 映射 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.4 271 存 映射 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.4.1 272 8.4.2 映射 /dev/zero. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 存 8.5 ......................................................... 275 malloc usable size() malloc trim() 进 调 . . . . . . . . . . . . . . . . . 8.5.1 277 8.6 调 内存 ............................................................ 278 8.6.1 ....................................................... 278 的 8.7 ............................................................ 280 的 8.7.1 ....................................................... 282 8.7.2 ............................................................ 283 的内存 8.8 .......................................... 284 8.9 存 操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 设 ............................................................ 8.9.1 286 8.9.2 ............................................................ 287 8.9.3 ............................................................ 288 8.9.4 ............................................................ 289 8.9.5 ............................................................ 290 8.10内存 ................................................................. 291 空间 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.10.1 291 空间 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.10.2 292 8.10.3 内存 ............................................................ 293 的 8.10.4 ......................................................... 294 页 理内存 8.10.5 ........................................ 294 性存 8.11 .................................................... 295 8.11.1 超 内存 ............................................... 295 – XI –
  11. 11. 第 9 章 信号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 9.1 ................................................................. 297 9.1.1 ......................................................... 298 的 9.1.2 Linux ................................................... 298 理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2 304 9.2.1 ............................................................ 305 子. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2.2 306 9.2.3 ......................................................... 309 9.2.4 映射 ............................................. 310 9.3 ................................................................. 311 9.3.1 ................................................................. 311 子. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.2 312 9.3.3 给自 .................................................... 312 9.3.4 给 进程 ............................................. 313 9.4 ..................................................................... 313 的 9.4.1 ............................................... 314 集................................................................... 9.5 316 9.5.1 更 的 集 .................................................. 316 9.6 ................................................................. 317 处理 9.6.1 .................................................... 318 集 ......................................................... 9.6.2 318 理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.7 319 9.7.1 siginfo t ........................................................ 321 9.7.2 si code 的 世 .................................................. 323 的 9.8 .................................................. 325 子. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.8.1 326 9.9 ..................................................................... 326 第 10 章 时间. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 10.1时间的 ......................................................... 330 10.1.1 原 示. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 10.1.2 ......................................................... 331 10.1.3 ......................................................... 331 时间 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.1.4 332 进程时间 10.1.5 .................................................. 333 10.2POSIX 时 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 10.3时间 .............................................................. 334 时间. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.4 335 更的 10.4.1 .................................................... 336 10.4.2 ....................................................... 337 进程时间 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.4.3 338 – XII –
  12. 12. 时间. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.5设 339 时 ......................................................... 10.5.1 340 10.5.2 设 时间的 ........................................... 340 时间. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.6 341 时 ............................................................ 10.7调校 343 10.8 .............................................................. 346 10.8.1 .................................................... 347 10.8.2 Linux 的实时 ................................................... 347 10.8.3 .................................................... 348 10.8.4 实 的 方 ............................................... 350 10.8.5 sleep 的 实 ............................................ 353 10.8.6 超 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 10.8.7 ............................................................ 354 10.9 时 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 10.9.1 单的 ......................................................... 354 10.9.2 间 时 ......................................................... 355 时 ......................................................... 10.9.3 358 10.9.4 设 时 ......................................................... 360 附录 A GCC 对 C 语言的扩展 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 A.1 GNU C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 A.2 内 ................................................................. 365 内 ................................................................. A.3 366 A.4 ................................................................... 367 A.5 ................................................................... 368 的 A.6 ............................................................ 368 内存的 A.7 ......................................................... 368 调 A.8 ............................................... 369 A.9 将 deprecated . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 A.10将 used. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 或 A.11将 unused . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 进 (pack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.12将 370 的内存对 A.13 ................................................. 371 存 A.14将 ............................................... 372 A.15 ................................................................. 372 式的 A.16 ....................................................... 373 的内存对 A.17 .................................................. 374 的 A.18 .................................................. 375 A.19 ....................................................... 375 A.20 Case ...................................................... 376 的 操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.21void 377 更 更的 性................................... A.22 377 – XIII –
  13. 13. 附录 B 参考书目 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 程 设 的相 B.1 C ............................................. 380 B.2 Linux 程的相 ................................................... 381 B.3 Linux 内 的相 ................................................... 381 B.4 操作 设 的相 ............................................... 382 – XIV –
  14. 14. 1 第 1 章 简介和主要概念 的 程的 将 写 件的相 。 件 的 内 进 。 的 件 、 、调 、 工 shell、文 : 即 GNU Core Utilities, 的 工 集 我 ( GNU 们 的 进程 。 程 内 以 ) C 件。 件( 程 ” ” (high-level)GUI 更 的 们 。 程 的时间 写 件 。 理 程 程 。 作 的 更 的 程 我们 写的 件的 。 的 Linux 上的 程的 。 Linux Linus Torvalds 内 散的 写的 操作 。 Unix Linux Unix 同的 理 自 的原 方方 Linux Unix Linux 的 实 能的 。 的 程的 内 Linux 何 的 Unix 的。然 内 Linux 相 的 Unix 自 出的 的新 的 调 Linux 同的 新 性。 1.1 系统编程 的 的 Unix 程 程。 上 的 上进 工作 Unix X Window 时 我们 的 Unix 以 上 API。 Linux 程 设 的。然 程 的 何 – make 的 上 的 程的 API。 Linux 们 程 程相 们 同 同 。 程 出的 程 对 工作的 的 件 操作 的 然 们 调 上的 。 写的 的 上 上 相 的内 。 的 –1–
  15. 15. 1 程 程 程 (或 相 件 的 。 ), 离 的 程的 然 的 的方 式的 程 同 。 我们 件( web Javascript ( C# 或 程 离 程 PHP Java 更 的 展。然 展 示 程的 。实 上 写 Javascript C# 程。更进 步 Java 程 然 以 程 同 PHP 理 内 的 能 何 写出更 的 。 程的 展 的 Unix Linux 的程 然 程 内 提 的 。 的 C C 程 Apache、 bash、 cp、 Emacs、 init、 gcc、 gdb、 glibc、 ls、 mv、 vim 时的。 X 程的 内 或 设备 的内 。 程的 将 内 。 将 内 上的内 ( 内 对 空间 程。同 程 以及相 的内 展 。设备 程 程 的 。 我 Linux 上 写 程 内 提 我 何 设 小 相 C Linux Linux 提 的 调 们 何工作的 Unix 将 的 。 程 调 的 C C 。 1.1.1 系统调用 程 调 。 调 ( 写 操作 syscalls 或 空间 文 内 ( 的 的 调 。 调 我们 的 read() 的 get thread area() write() set tid address()。 Linux 实 的 调 操作 。 i386 –2–
  16. 16. 1 的 调 相 的 Windows 上 。 300 Linux 的内 ( 实 自的 Alpha i386 PowerPC) 调 。 同 间的 调 存 的 。然 90% 以 上 调 的 上 实 。 上 的 的 内 。 1.1.2 调用系统调用 空间 程 能 内 。 的 空间程 内 的 或 操作内 。相 内 提 空间程 能 内 调 调 。 程 能 内 内 的 。 同的 相同 i386 上 空间程 0x80 的 将 内 int 的 内 处理 的 0x80 的处理 的 调 处理 。 程 存 内 调 。 调 。 上 调 0 i386 5( 空间程 将5 写 存 。 open() int eax 的方式进 处理。 以 i386 存 能的 存 存 。对 ebx、 ecx、 edx、 esi edi 5 的超 的 调 的 存 空间 存 5 的 存 即 。 然 调 的 。 处理 调 的方式 同 的 的。作 程 内 处理 调 的。 内 的 调 的 自 处理。 C 1.1.3 C 库 (libc 程 的 。 的 C Unix C 的 的 提 或 方 的 调 。 的 Linux GNU libc 提 C glibc [gee-lib-see] 或 更 [glib-see]. 提 超 展示的内 。 的C 提 GNU C glibc –3–
  17. 17. 1 调 程 工 。 1.1.4 C 编译器 的C 工 集(gcc 。原 Linux GNU gcc 的 cc 。 示 GNU C Compiler。 GNU C GCC 的 进 。时 的 。然 gcc GNU 调 我 gcc 的时 gcc C 上 文 的 程 。 gcc 实 的 ABI( C ( ”C ”) ”APIs 的 程的 ABIs” ) Unix ( Linux ) 。 1.2 API 和 ABI 将 程 们 们写的程 以 提 的 上。 们 们自 的 Linux 上 的程 能 的 Linux 同时 以 的 更新的 Linux 上。 Linux 性的 相 的 集 程 (API 程 进 (ABI 件 同 间的 。 1.2.1 API 件 间 的 。 提 API 以 的方式) 的方式进 程 段( 的 ( : 以调 程 段( 。 上 示文 的 API 能 对 示文 提 的。 我们 的 实 对 API 的实 。 API API 们 理 的 API 上 。 API 的 件) 给 API 的 API ( 实 提 何实 内 能 的 子 或 或 。 API 的 件 同 的 API 时 。 API 的实 上能 。 API –4–
  18. 18. 1 实 的 子 实 API C C API 的 处理 。 我们 及 的 API IO。 Linux 程 的 API 将 的 。 1.2.2 ABI 的 的 上 或 API ABI 件 间的 进 。 何 自 何 内 以及 进 。 ABI 进 段 能 何 同 ABI 的 上 作 新 。 的 调 、 、 存 、 调 、 ABI 、 进 式。以调 何 调 何 存 以及调 何提 的 。 同的操作 ( i386 上的 Unix 操作 的 ABI 然 效。相 Linux 内的操作 自 的 ABI 相 。 ABI 的 ABI 及 的 的 存 或 。 Linux 自 的 ABI 集 实上 我们以 的 。 ABI alpha x86-64 程 ABI 的 。 ABI 上的 工 (tooltrain 、 。 ABI 的相 内 以 写出更 的 写 或 工 时的绝 ( 实 程。 我们 以 上 Linux 上 的工 内 实 的 ABI 。 1.3 标准 程 的 程 。 Unix Unix 的 。 性 。 Unix 的世 将 方 。 –5–
  19. 19. 1 的 上 们。 Linux Linux 的 POSIX Single Unix Specification(SUS) 内 Unix 操作 上的 C API POSIX SUS 们 效的 的 Unix 程 出 的 API 集。 1.3.1 POSIX 和 SUS 的历史 子工程 (IEEE 的 1980 Unix 的相 工作。自 件 (Free Software Movement 的 ( Richard Stallman POSIX pahz-icks 操作 。 Portable Operating System Interface( 1988 IEEE std 1003.1-1988( 。 1990 POSIX1988 IEEE POSIX IEEE std 1003.1- 。 性的实时 程 1990(POSIX1990 IEEE Std 1003.1b-1993 式 (POSIX 1993 or POSIX.1b) IEEE Std 1003.1c-1995(POSIX 1995 or POSIX.1c) 文。 2001 性 POSIX1990 的 上 单 的 新的 布 IEEE Std 1003.1-2001 (POSIX 2001)。 IEEE Std 1003.1-2004 的 以 2004 新 2004 4 POSIX POSIX.1 。 的 1980 1990 Unix ”Unix ” 处 的将 自 的 Unix 的 ”Unix”。 工业 Unix Open Software Foundation(OSF X/Open -The Open Group。 The Open Group 提 、 。 1990 的时 布 单 Unix The Open Group UNIX (Single UNIX Specification 。相 的 POSIX SUS SUS 的 。 新的 POSIX 。 SUS 的 SUS 布 的 1994 SUSv1 Unix 95. 的 SUS 布 相 的 的 1997 UNIX 98. 新的 SUS,SUSv3 布 的 SUS 2002 Unix 03.SUSv3 。 我将 IEEE Std 1003.1-2001 的 调 提及。我将提及 POSIX POSIX SUS ( 的 超集 SUS POSIX.1 –6–
  20. 20. 1 的 扩展 的 POSIX.1 提 的 能 –APUE S2.2.3 。 1.3.2 C 语言标准 Brian Kernighan 的 作 C程 设 Dennis Ritchie (Prentice Hall) 自 1978 出 式的 C 的 。 的C 的 程的 K&R C。 C Basic 。 对 时 相 的 进 (ANSI 方 的C 1983 进 新的 性 同时 的 。 C++ 程 。 1990 ANSI C 1989 (ISO ANSI C 进 ISO C90。 布 新 ( 然 1995 ISO ISO 的 ISO C99 更新 的内 进 新的 C95。 1999 、新 、 、 C++ 新的 。 inline 1.3.3 Linux 和标准 POSIX 以及 SUS 提 Linux SUSv3 POSIX.1 的 的实时(POSIX.1b) 程 (POSIX.1c) 。更 的 提 的 。 满 Linux POSIX SUS 的 即 SUSv3 实 的 bug。 Linux POSIX.1 POSIX 或 方 ( Linux 的 以我 式 SUS 布 Linux POSIX 或 的。 SUS gcc 提 Linux gcc C ISO C99 的扩展 扩展 相 。 C GNU C。 的 的 子 。 Linux C 的 将 的 。 进 以 的 glibc 。 gcc 扩展 对 新的 gcc 布 gcc 将 的 的C C 程 。 的 Linux 内 调 的 调 Linux 内 的 上实 。 同 的 Linux 布 (LSB 。 Linux ( 自 LSB Linux [Free Standard Group]) –7–

×