18ddf2ba0092217b59726b053d7a4155.pdf
- 文档编号:30812369
- 上传时间:2024-01-30
- 格式:PDF
- 页数:396
- 大小:1.91MB
18ddf2ba0092217b59726b053d7a4155.pdf
《18ddf2ba0092217b59726b053d7a4155.pdf》由会员分享,可在线阅读,更多相关《18ddf2ba0092217b59726b053d7a4155.pdf(396页珍藏版)》请在冰豆网上搜索。
谨将我们的工作献给即将毕业离校的兄弟们林晓鑫、刘德超、黄巍、周蓝珺、胡禹轩、王新喜、何春晓、崔剑、李浩。
以及潘海东即将出世的小Baby!
II?
0?
译者序?
LinuxSystemProrgramming?
(?
LSP)的?
文?
工作?
实?
工业?
IBM?
理?
的?
。
?
工作的同?
的?
同?
。
?
们?
林晓鑫、王?
、崔?
春、?
、何春晓、?
、李?
、?
、?
、?
、?
。
?
的?
SMS?
文献?
的?
王?
。
刘文?
、王?
、刘德超、?
、王新喜?
同?
校工作。
?
的?
校?
。
?
工业?
文TeX?
作?
的?
工作?
李?
。
?
的?
工作?
LSP?
文?
进?
。
?
内?
布?
原IBM?
(?
工程?
)?
晓?
(?
SUN?
)的?
们?
的业?
时间对?
进?
的?
校?
提出?
的?
。
?
们的?
的同?
。
?
们?
示?
。
?
程?
HarbinLinuxUserGroup?
的?
?
们?
示?
。
?
程方?
的?
工作以?
的?
的?
。
?
存?
何?
方式?
我们?
:
Website:
http:
/www.footoo.orgTwitter:
http:
/或?
cliffwoofootoo.orgGoogleGroups:
http:
/SystemProgramming?
文?
的?
工作?
工业?
IBM?
的?
。
?
文?
程的?
?
业?
。
?
LinuxSystemProrgramming?
的?
作?
及原出?
文?
程的?
。
?
原?
作?
及出?
的出?
、?
、?
作?
的?
。
IV?
目录译者序译者序.III版权声明版权声明.IV第第1章简介和主要概念章简介和主要概念.11.1?
程.11.1.1?
调?
.21.1.2调?
调?
.31.1.3C?
.31.1.4C?
.41.2API?
ABI.41.2.1API.41.2.2ABI.51.3?
.51.3.1POSIX?
SUS的?
.61.3.2C?
.71.3.3Linux?
.71.3.4?
.81.4Linux?
程?
.81.4.1文件?
文件?
.81.4.2?
文件.91.4.3?
.101.4.4?
.111.4.5?
.121.4.6?
文件.121.4.7文件?
空间.131.4.8进程.141.4.9?
程.151.4.10进程?
.161.4.11?
.161.4.12?
.171.4.13?
.181.4.14进程间?
.181.4.15?
文件.191.4.16?
处理.191.5?
程.22V?
第第2章文件章文件I/O.232.1?
文件.242.1.1open()?
调?
.242.1.2新文件?
.262.1.3新文件?
.262.1.4creat()?
.282.1.5?
.292.2?
read()读?
文件.292.2.1?
.302.2.2读?
的?
.312.2.3?
读.322.2.4?
.332.2.5read()?
小?
.332.3?
write()?
写.342.3.1?
写.352.3.2?
式.362.3.3?
写.362.3.4?
.362.3.5write()?
小?
.372.3.6write()的?
.372.4同步I/O.382.4.1fsync()?
fdatasync().382.4.2?
.392.4.3sync().402.4.4OSYNC?
.412.4.5ODSYNC?
ORSYNC.412.5?
I/O.422.6?
文件.422.6.1?
.432.7?
lseek()?
.442.7.1文件?
进?
.452.7.2?
.462.7.3?
.462.8?
读写.462.8.1?
.472.9?
文件.472.10I/O?
.492.10.1select().502.10.2?
.522.10.3poll().572.10.4poll()?
select().61VI?
2.11内?
内?
.612.11.1?
文件?
.622.11.2页?
存.632.11.3页?
写.642.12?
.65第第3章缓冲输入输出章缓冲输入输出.663.1?
I/O.663.1.1?
小.673.1.2?
I/O.683.1.3文件?
.683.2?
文件.693.2.1?
式.693.2.2?
文件?
文件.703.3?
.713.3.1?
的?
.713.4?
读?
.713.4.1单?
读?
.713.4.2?
.723.4.3?
的读?
.723.4.4读?
.733.4.5读?
进?
文件.743.5?
写?
.753.5.1对?
的?
.753.5.2写?
单?
.763.5.3写?
.763.5.4写?
进?
.773.5.5?
I/O示?
程?
.773.6?
.793.6.1?
.803.7?
.813.8?
文件?
.823.9?
的文件?
.833.10?
.833.11?
程?
.853.11.1?
文件?
.853.11.2?
操作.863.12对?
I/O的?
.873.13?
.88VII?
第第4章高级文件章高级文件I/O.894.1散布/聚集I/O.894.1.1readv()?
writev().904.2EventPoll?
.964.2.1?
新的epoll实?
.964.2.2?
epoll.974.2.3?
Epoll?
件.994.2.4?
件?
件.1014.3存?
映射.1014.3.1mmap().1024.3.2munmap().1064.3.3存?
映射?
子.1064.3.4mmap()的?
.1084.3.5mmap()的?
.1094.3.6调?
映射的?
小.1094.3.7?
映射?
的?
.1104.3.8?
映射?
同步文件.1114.3.9映射提示.1124.4?
文件I/O提示.1144.4.1posixfadvise().1144.4.2readahead()?
调?
.1164.4.3?
实?
的操作提示.1164.5同步(Synchronized)?
同步(Synchronous)及异步(Asynchronous)操作.1174.5.1异步I/O.1184.6I/O调?
I/O性能.1204.6.1?
.1204.6.2调?
的?
能.1214.6.3?
进读?
.1224.6.4?
的I/O调?
.1254.6.5?
I/O性能.1254.7?
.132第第5章进程管理章进程管理.1335.1进程ID.1335.1.1?
进程ID.1345.1.2进程?
.1345.1.3pidt.1355.1.4?
进程ID?
进程的ID.1355.2?
新进程.1365.2.1exec?
调?
.1365.2.2fork()?
调?
.139VIII?
5.3?
进程.1435.3.1?
进程的方式.1445.3.2atexit().1455.3.3onexit().1465.3.4SIGCHLD.1465.4?
的子进程.1475.4.1?
进程.1505.4.2?
子进程的方?
.1525.4.3BSD?
的wait3()?
wait4().1535.4.4?
新进程.1555.4.5?
进程.1585.5?
.1585.5.1实?
(?
)ID、?
效?
(?
)ID?
存设?
的?
(?
)ID.1595.5.2?
实?
(?
)ID?
存设?
的?
(?
)ID.1605.5.3?
效?
ID.1615.5.4BSD?
ID?
ID的方式.1615.5.5HP-UX?
ID?
ID的方式.1625.5.6操作?
ID?
ID的?
方?
.1635.5.7对?
存设?
的?
ID的?
.1635.5.8?
ID?
ID.1635.6?
进程?
.1645.6.1?
相?
的?
调?
.1655.6.2?
进程?
相?
的?
调?
.1675.6.3?
的进程?
.1685.7?
进程.1695.8?
.171第第6章高级进程管理章高级进程管理.1726.1进程调?
.1726.1.1?
O?
.1736.1.2时间?
.1736.1.3I/O?
进程Vs.处理?
进程.1746.1.4?
调?
.1756.1.5?
程.1756.2?
出处理?
.1766.2.1?
理?
.1766.2.2?
出处理?
方?
的?
.1776.3进程?
.1786.3.1nice().1796.3.2getpriority()?
setpriority().1806.3.3I/O?
.181IX?
6.4处理?
.1826.4.1schedgetaffinity()?
schedsetaffinity().1836.5实时?
.1856.5.1?
实时?
.1866.5.2?
时?
.1866.5.3Linux的实时?
.1876.5.4Linux调?
.1886.5.5设?
调?
.1926.5.6schedrrgetinterval().1956.5.7?
实时进程的?
提?
.1976.5.8?
性.1976.6?
.2006.6.1?
.2016.6.2?
设?
.204第第7章文件与目录管理章文件与目录管理.2077.1文件及?
.2077.1.1?
stat?
.2077.1.2?
.2117.1.3?
.2137.1.4扩展属性.2157.2?
.2237.2.1?
工作?
.2247.2.2?
.2297.2.3?
.2307.2.4读?
内?
.2317.3?
.2357.3.1?
.2367.3.2?
.2377.3.3?
.2397.4?
文件.2407.4.1?
.2407.4.2?
.2417.5设备?
.2427.5.1?
设备?
.2437.5.2?
.2437.6?
.2447.7?
文件?
件.2467.7.1?
inotify.2477.7.2?
.247X?
7.7.3inotify?
件.2497.7.4?
.2527.7.5?
inotify?
.2537.7.6?
件?
小.2547.7.7?
inotify实?
.255第第8章内存管理章内存管理.2568.1进程?
空间.2568.1.1页?
页?
调?
.2568.1.2存?
.2578.2?
内存?
.2588.2.1?
.2608.2.2调?
内存?
小.2628.2.3?
内存的?
.2648.2.4对?
.2668.3?
段的?
理.2708.4?
存?
映射.2718.4.1?
存?
映射.2728.4.2映射?
/dev/zero.2748.5?
存?
.2758.5.1?
mallocusablesize()?
malloctrim()进?
调?
.2778.6调?
内存?
.2788.6.1?
.2788.7?
的?
.2808.7.1?
的?
.2828.7.2?
.2838.8?
的内存?
.2848.9存?
操作.2868.9.1?
设?
.2868.9.2?
.2878.9.3?
.2888.9.4?
.2898.9.5?
.2908.10内存?
.2918.10.1?
空间.2918.10.2?
空间.2928.10.3内存?
.2938.10.4?
的?
.2948.10.5?
页?
理内存?
.2948.11?
性存?
.2958.11.1超?
内存?
.295XI?
第第9章信号章信号.2979.1?
.2979.1.1?
.2989.1.2Linux?
的?
.2989.2?
理.3049.2.1?
.3059.2.2?
子.3069.2.3?
.3099.2.4映射?
.3109.3?
.3119.3.1?
.3119.3.2?
子.3129.3.3给自?
.3129.3.4给?
进程?
.3139.4?
.3139.4.1?
的?
.3149.5?
集.3169.5.1更?
的?
集?
.3169.6?
.3179.6.1?
处理?
.3189.6.2?
集.3189.7?
理.3199.7.1siginfot?
.3219.7.2sicode的?
世?
.3239.8?
的?
.3259.8.1?
子.3269.9?
.326第第10章时间章时间.32810.1时间的?
.33010.1.1原?
示.33010.1.2?
.33110.1.3?
.33110.1.4?
时间.33210.1.5?
进程时间?
.33310.2POSIX时?
.33310.3时间?
.33410.4?
时间.33510.4.1?
更?
的?
.33610.4.2?
.33710.4.3?
进程时间.338XII?
10.5设?
时间.33910.5.1?
时.34010.5.2设?
时间的?
.34010.6?
时间.34110.7调校?
时?
.34310.8?
.34610.8.1?
.34710.8.2Linux的实时?
.34710.8.3?
.34810.8.4实?
的?
方?
.35010.8.5sleep的?
实?
.35310.8.6超?
.35310.8.7?
.35410.9?
时?
.35410.9.1?
单的?
.35410.9.2间?
时?
.35510.9.3?
时?
.35810.9.4设?
时?
.360附录附录AGCC对对C语言的扩展语言的扩展.365A.1GNUC.365A.2内?
.365A.3?
内?
.366A.4?
.367A.5?
.368A.6?
的?
.368A.7?
内存的?
.368A.8?
调?
.369A.9将?
deprecated.369A.10将?
used.370A.11将?
或?
unused.370A.12将?
进?
(pack?
.370A.13?
的内存对?
.371A.14将?
存?
.372A.15?
.372A.16?
式的?
.373A.17?
的内存对?
.374A.18?
的?
.375A.19?
.375A.20?
Case?
.376A.21void?
的?
操作.377A.22?
更?
更?
的?
性.377XIII?
附录附录B参考书目参考书目.380B.1C?
程?
设?
的相?
.380B.2Linux?
程的相?
.381B.3Linux内?
的相?
.381B.4操作?
设?
的相?
.382XIV?
1?
第1章简介和主要概念?
的?
程的?
将?
写?
件的相?
。
?
件?
的?
内?
进?
。
?
的?
件?
shell、文?
、?
、调?
、?
工?
(?
:
即GNUCoreUtilities,?
GNU?
的?
工?
集?
我们?
的?
)?
进程?
。
?
程?
内?
C?
以?
”?
”?
件。
?
件(?
(high-level)GUI?
程?
更?
的?
们?
。
?
程?
的时间?
写?
件?
。
?
理?
程?
程?
。
?
作?
的?
更?
的?
程?
我们?
写的?
件的?
。
?
的?
Linux上的?
程的?
。
Linux?
LinusTorvalds?
内?
散的?
写的?
Unix?
操作?
。
?
Linux?
Unix?
同的?
理?
Linux?
Unix?
Linux?
自?
的原?
方方?
的?
实?
能的?
。
?
的?
Linux?
程的?
内?
何?
的Unix?
的。
然?
内?
Linux相?
的Unix?
自?
出的?
Linux?
的新?
的?
调?
同的?
新?
性。
1.1系统编程?
的?
的Unix?
程?
程。
?
上?
Unix?
的?
XWindow?
上进?
工作时?
我们?
的Unix?
API。
?
以?
上?
Linux程?
设?
的。
然?
程?
的?
何?
make的?
Linux?
上?
的?
程的API。
?
们?
程?
程相?
们?
同?
同?
。
?
程?
出的?
程?
对?
工作的?
的?
件?
操作?
的?
然?
们?
调?
上的?
。
?
写的?
的?
上?
上?
相?
的内?
。
?
的?
1?
1?
程?
程?
程(或?
相?
),?
件?
的?
。
?
离?
的?
程的?
然?
的?
的方?
式的?
程?
同?
。
?
我们?
web?
件(?
Javascript?
PHP?
(?
C#或?
Java?
程?
离?
程?
更?
的?
展。
然?
展?
示?
程的?
。
实?
上?
写Javascript?
C#?
程。
更进?
步?
PHP?
Java程?
然?
以?
程?
同?
理?
内?
的?
能?
何?
写出更?
的?
。
?
程的?
展?
的Unix?
Linux的程?
然?
程?
C?
C?
内?
提?
的?
。
?
的?
程?
Apache、bash、cp、Emacs、init、gcc、gdb、glibc、ls、mv、vim?
X?
时的。
?
程的?
内?
或?
设备?
的内?
。
?
程的?
将?
内?
。
?
将?
内?
上的内?
(?
内?
对?
空间?
程。
同?
程?
以及相?
的内?
展?
。
设备?
程?
程?
的?
。
?
我?
Linux上?
写?
程?
内?
C?
提?
我?
何?
Linux?
设?
小?
相?
Unix?
Linux提?
的?
调?
们?
何工作的?
将?
的?
。
?
程?
调?
C?
C?
的?
。
1.1.1系统调用?
程?
调?
。
?
调?
(?
写?
syscalls?
操作?
或?
空间?
文?
内?
(?
的?
的?
调?
。
?
调?
我们?
的read()?
write()?
的getthreadarea()?
settidaddress()。
Linux实?
的?
调?
操作?
。
?
i3862?
1?
的?
调?
300?
相?
的Windows?
上?
。
?
Linux的内?
(?
Alpha?
i386?
PowerPC)?
实?
自的?
调?
。
?
同?
间的?
调?
存?
的?
。
然?
90%以上?
调?
的?
上?
实?
。
?
上?
的?
的内?
。
1.1.2调用系统调用?
空间?
程?
能?
内?
。
?
的?
空间程?
内?
的?
或?
操作内?
。
相?
内?
提?
空间程?
能?
内?
调?
调?
。
?
程?
能?
内?
内?
的?
。
?
同的?
相同?
i386上?
空间程?
0x80的?
int?
将?
内?
的?
内?
处理?
的?
0x80的处理?
的?
调?
处理?
。
?
程?
存?
内?
调?
。
?
调?
0?
。
?
i386?
上?
调?
5(?
open()?
空间程?
int?
将5?
写?
eax?
存?
。
?
的方式进?
处理。
?
以i386?
存?
能的?
存?
ebx、ecx、edx、esi?
edi?
存?
5?
。
对?
的超?
5?
的?
调?
的?
存?
空间?
存?
的?
存?
即?
。
?
然?
调?
的?
。
?
处理?
调?
的方式?
同?
的?
的。
作?
程?
内?
处理?
调?
的。
?
内?
的?
调?
的?
C?
自?
处理。
1.1.3C库C?
(libc?
Unix?
程?
的?
。
?
的?
C?
的?
的?
提?
或?
方?
的?
调?
。
?
的Linux?
C?
GNUlibc提?
glibc?
gee-lib-see或?
更?
glib-see.GNUC?
提?
超?
展示的内?
。
?
的C?
glibc?
提3?
1?
调?
程?
工?
。
1.1.4C编译器?
Linux?
的C?
GNU?
工?
集(gcc?
。
原?
gcc?
GNU?
的cc?
C?
。
?
GCC?
示GNUCCompiler。
?
的?
进?
。
时?
gcc?
GNU?
的?
。
然?
gcc?
调?
C?
我?
gcc的时?
上?
文?
的?
gcc?
程?
。
?
实?
C?
(?
”C?
”)?
的ABI(?
”APIs?
ABIs”?
)?
Unix?
(?
Linux?
)?
的?
程的?
。
1.2API和ABI?
将?
程?
们?
们写的程?
以?
提?
的?
上。
?
们?
们自?
的Linux?
上?
的程?
能?
的Linux?
同时?
以?
Linux?
的?
更新的Linux?
上。
?
性的?
相?
的?
集?
程?
(API?
程?
进?
(ABI?
件?
同?
间的?
。
1.2.1APIAPI?
件?
间?
的?
。
?
提?
(?
以?
的方式)的方式进?
:
?
程?
段(?
的?
以调?
程?
段(?
。
?
上?
示文?
的API?
能?
对?
示文?
提?
的。
?
API?
我们?
的?
API?
实?
对API的实?
。
?
们?
API?
理?
的?
上?
API?
。
API的?
(?
件)?
给API的?
实?
提?
何实?
内?
能?
的?
子?
或?
或?
。
API?
的?
件?
同?
的API时?
。
?
API?
API的实?
上能?
。
4?
1?
实?
的?
子?
API?
C?
C?
实?
API?
的?
处理?
。
?
我们?
及?
API?
的?
IO。
Linux?
程?
的API将?
的?
。
1.2.2ABIAPI?
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?
1?
的?
上?
Linux?
们。
Linux?
的?
POSIX?
SingleUnixSpecification(SUS)?
内?
POSIX?
SUS?
Unix操作?
上的CAPI?
们?
效的?
的Unix?
程?
出?
的API集。
1.3.1POSIX和SUS的历史?
1980?
子工程?
(IEEE?
Unix?
的?
的相?
工作。
自?
件?
(FreeSoftwareMovement?
的?
RichardStallman?
POSIX?
(?
pahz-icks?
PortableOperatingSystemInterface(?
操作?
。
?
1988?
IEEEstd1003.1-1988(?
POSIX1988?
。
1990?
IEEE?
POSIX?
IEEEstd1003.1-1990(POSIX1990?
。
?
性的实时?
程?
IEEEStd1003.1b-1993(POSIX1993orPOSIX.1b)?
IEEEStd1003.1c-1995(POSIX1995orPOSIX.1c)?
式?
文。
2001?
性?
POSIX1990的?
上?
单?
的?
IEEEStd1003.1-2001(POSIX2001)。
?
新的?
IEEEStd1003.1-2004?
布?
2004?
4?
的?
POSIX?
POSIX.1?
以2004?
新?
。
?
1980?
1990?
Unix?
的?
”Unix?
”?
处?
的将?
自的Unix?
”Unix”。
?
的Unix?
OpenSoftwareFoundation(OSF?
X/Open?
工业?
-TheOpenGroup。
TheOpenGroup提?
、?
。
?
1990?
Unix?
的时?
TheOpenGroup?
布?
单?
UNIX?
(SingleUNIXSpecification?
SUS?
。
相?
的POSIX?
SUS?
的?
。
?
SUS?
新的POSIX?
。
?
的SUS?
布?
1994?
SUSv1?
的?
Unix95.?
的SUS?
布?
1997?
相?
的?
UNIX98.?
的SUS?
新的SUS,SUSv3?
布?
2002?
的?
Unix03.SUSv3?
IEEEStd1003.1-2001?
。
?
我将?
POSIX?
的?
调?
提及。
我将提及POSIX?
SUS?
(?
SUS?
POSIX.1?
的?
超集?
6?
1?
的?
扩展?
的POSIX.1?
提?
的?
能APUES2.2.3?
。
1.3.2C语言标准DennisRitchie?
BrianKernighan的?
作?
C程?
设?
(PrenticeHall)自1978?
出?
式的C?
的?
。
?
的C?
K&RC。
C?
的?
Basic?
程的?
。
?
对?
时?
相?
的?
进?
(ANSI?
1983?
方?
的C?
进?
新的?
性?
同时?
C+?
的?
。
?
程?
ANSIC?
1989?
。
1990?
(ISO?
ANSIC进?
ISOC90。
?
1995?
ISO?
布?
新?
(?
然?
ISOC95。
1999?
的?
ISOC99更新?
的内?
进?
新的?
inline?
、新?
、?
、C+?
新的?
。
1.3.3Linux和标准?
Linux?
POSIX以及SUS?
提?
SUSv3?
POSIX.1?
的?
的实时(POSIX.1b)?
程(POSIX.1c)?
。
更?
的?
Linux?
提?
POSIX?
SUS?
的?
。
?
满?
的?
即?
bug。
Linux?
POSIX.1?
SUSv3实?
的?
POSIX或?
SUS?
方?
(?
Linux的?
以我?
式?
布Linux?
POSIX或?
SUS?
的。
?
Linux?
gccC?
ISOC99?
gcc提?
C?
的扩展?
扩展?
GNUC。
?
相?
。
Linux?
的?
的?
子?
。
?
C?
的?
将?
的?
。
?
进?
以?
的glibc?
。
?
gcc扩展?
对?
新的gcc?
布?
C?
gcc将?
的?
的C程?
。
?
的?
Linux内?
调?
的?
调?
Linux内?
的?
上实?
。
?
同的Linux?
布?
Linux?
(LSB?
。
LSB?
Linux?
(?
自?
FreeStandardGroup)?
7?
1?
的?
。
LSB扩展?
POSIX?
SUS?
自?
的?
。
?
提?
进?
即?
的?
上?
。
?
Linux?
程?
上?
LSB?
。
1.3.4本书和标准?
何?
的空?
。
?
时?
Unix?
程?
对?
同?
的?
的?
进?
给?
的?
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 18 ddf2ba0092217b59726b053d7a4155