Linux系统编程(第二版,影印版)
Robert love
出版时间:2013年12月
页数:429

“任何认真考虑编写Linux应用的人或者只是想要提高他们编程技能的人都应该阅读《Linux系统编程》。Robert为专业的Linux编程人员创作了不可或缺的资源。”
——Jeremy Allison
Samba团队

如何编写那些直接依赖于Linux内核和核心系统库提供的服务的软件?通过这本详尽的书籍,Linux内核参与者Robert Love为你提供了Linux系统编程方面的教程, Linux系统调用的参考手册,以及对于如何编写更聪明和更快的代码的来自内部人士的建议。
Love清晰地指出了POSIX标准函数和Linux特别提供服务之间的差异。通过关于多线程的新章节,这本修订和扩展的版本在理论和实践上相结合,从多个编程主题上提供了深入的见解,包括:
· Linux内核、C库和C编译器概览
· 基础I/O操作,比如读取和写入文件
· 高级I/O接口、内存映射和优化技术
· 基础进程管理的系统调用全集
· 高级进程管理,包括实时进程
· 线程概念、多线程编程和Pthreads
· 文件和目录管理
· 用于分配内存和优化内存访问的接口
· 基础和高级的信号接口以及它们在系统中的作用
· 时钟管理,包括POSIX时钟和高解析度定时器

Robert Love在Linux早期就已经介入,他为Linux内核和GNOME桌面环境做出了自己的贡献。Robert是Google公司的资深软件工程师,他隶属于设计和发布Android的开发队伍。
  1. Chapter 1: Introduction and Essential Concepts
  2. System Programming
  3. APIs and ABIs
  4. Standards
  5. Concepts of Linux Programming
  6. Getting Started with System Programming
  7. Chapter 2: File I/O
  8. Opening Files
  9. Reading via read()
  10. Writing with write()
  11. Synchronized I/O
  12. Direct I/O
  13. Closing Files
  14. Seeking with lseek()
  15. Positional Reads and Writes
  16. Truncating Files
  17. Multiplexed I/O
  18. Kernel Internals
  19. Conclusion
  20. Chapter 3: Buffered I/O
  21. User-Buffered I/O
  22. Standard I/O
  23. Opening Files
  24. Opening a Stream via File Descriptor
  25. Closing Streams
  26. Reading from a Stream
  27. Writing to a Stream
  28. Sample Program Using Buffered I/O
  29. Seeking a Stream
  30. Flushing a Stream
  31. Errors and End-of-File
  32. Obtaining the Associated File Descriptor
  33. Controlling the Buffering
  34. Thread Safety
  35. Critiques of Standard I/O
  36. Conclusion
  37. Chapter 4: Advanced File I/O
  38. Scatter/Gather I/O
  39. Event Poll
  40. Mapping Files into Memory
  41. Advice for Normal File I/O
  42. Synchronized, Synchronous, and Asynchronous Operations
  43. I/O Schedulers and I/O Performance
  44. Conclusion
  45. Chapter 5: Process Management
  46. Programs, Processes, and Threads
  47. The Process ID
  48. Running a New Process
  49. Terminating a Process
  50. Waiting for Terminated Child Processes
  51. Users and Groups
  52. Sessions and Process Groups
  53. Daemons
  54. Conclusion
  55. Chapter 6: Advanced Process Management
  56. Process Scheduling
  57. The Completely Fair Scheduler
  58. Yielding the Processor
  59. Process Priorities
  60. Processor Affinity
  61. Real-Time Systems
  62. Resource Limits
  63. Chapter 7: Threading
  64. Binaries, Processes, and Threads
  65. Multithreading
  66. Threading Models
  67. Threading Patterns
  68. Concurrency, Parallelism, and Races
  69. Synchronization
  70. Pthreads
  71. Further Study
  72. Chapter 8: File and Directory Management
  73. Files and Their Metadata
  74. Directories
  75. Links
  76. Copying and Moving Files
  77. Device Nodes
  78. Out-of-Band Communication
  79. Monitoring File Events
  80. Chapter 9: Memory Management
  81. The Process Address Space
  82. Allocating Dynamic Memory
  83. Managing the Data Segment
  84. Anonymous Memory Mappings
  85. Advanced Memory Allocation
  86. Debugging Memory Allocations
  87. Stack-Based Allocations
  88. Choosing a Memory Allocation Mechanism
  89. Manipulating Memory
  90. Locking Memory
  91. Opportunistic Allocation
  92. Chapter 10: Signals
  93. Signal Concepts
  94. Basic Signal Management
  95. Sending a Signal
  96. Reentrancy
  97. Signal Sets
  98. Blocking Signals
  99. Advanced Signal Management
  100. Sending a Signal with a Payload
  101. A Flaw in Unix?
  102. Chapter 11: Time
  103. Time’s Data Structures
  104. POSIX Clocks
  105. Getting the Current Time of Day
  106. Setting the Current Time of Day
  107. Playing with Time
  108. Tuning the System Clock
  109. Sleeping and Waiting
  110. Timers
  111. Appendix: GCC Extensions to the C Language
  112. GNU C
  113. Inline Functions
  114. Suppressing Inlining
  115. Pure Functions
  116. Constant Functions
  117. Functions That Do Not Return
  118. Functions That Allocate Memory
  119. Forcing Callers to Check the Return Value
  120. Marking Functions as Deprecated
  121. Marking Functions as Used
  122. Marking Functions or Parameters as Unused
  123. Packing a Structure
  124. Increasing the Alignment of a Variable
  125. Placing Global Variables in a Register
  126. Branch Annotation
  127. Getting the Type of an Expression
  128. Getting the Alignment of a Type
  129. The Offset of a Member Within a Structure
  130. Obtaining the Return Address of a Function
  131. Case Ranges
  132. Void and Function Pointer Arithmetic
  133. More Portable and More Beautiful in One Fell Swoop
  134. Appendix Bibliography
  135. Books on the C Programming Language
  136. Books on Linux Programming
  137. Books on the Linux Kernel
  138. Books on Operating System Design
  139. Index
书名:Linux系统编程(第二版,影印版)
作者:Robert love
国内出版社:东南大学出版社
出版时间:2013年12月
页数:429
书号:978-7-5641-4601-6
原版书书名:Linux System Programming, 2nd Edition
原版书出版商:O'Reilly Media
Robert love
 
Robert Love从早些年开始就是一个Linux用户和黑客。他活跃,也热衷于Linux内核和GNOME桌面社区。他现在对Linux内核的贡献包括从事内核事件层和inotify。GNOME相关的贡献包括Beagle,GNOME Volume Manager,Network Manager和Utopia项目。现在Robert在Google公司的Open Source Program Office(开源程序办公室)工作。
Robert是《Linux Kernel Development (SAMS, 2005)》和《Linux System Programming (O’Reilly, 2007)》两本书的作者。他也是Linux Journal的特约编辑。现在正在为O’Reilly做一项新的工作,这将是有史以来最伟大的书,不管是写作,给予或采用。Robert在佛罗里达大学获得了一个数学方面的BA(文学学士)学位和一个计算机科学方面的BS(理学学士)学位。值得自豪的是,Robert出生在佛罗里达州南部,现在称为马萨诸塞州剑桥的家里。
 
 
The image on the cover of Linux System Programming is a man in a flying machine. Well before the Wright brothers achieved their first controlled heavier-than-air flight in 1903, people around the world attempted to fly by simple and elaborate machines. In the second or third century, Zhuge Liang of China reportedly flew in a Kongming lantern, the first hot air balloon. Around the fifth or sixth centuries, many Chinese people purportedly attached themselves to large kites to fly through the air.It is also said that the Chinese created spinning toys that were early versions of helicopters, the designs of which may have inspired Leonardo da Vinci in his initial attempts at a solution to human flight. da Vinci also studied birds and designed parachutes, and in 1845, he designed an ornithopter, a wing-flapping machine meant to carry humans through the air. Though he never built it, the ornithopter's birdlike structure influenced the design of flying machines throughout the centuries.The flying machine depicted on the cover is more elaborate than James Means's model soaring machine of 1893, which had no propellers. Means later printed an instruction manual for his soaring machine, which in part states that "the summit of Mt. Willard, near the Crawford House, N.H., will be found an excellent place" to experiment with the machines.But such experimentation was often dangerous. In the late nineteenth century, Otto Lilienthal built monoplanes, biplanes, and gliders. He was the first to show that control of human flight was within reach, and he gained the nickname "father of aerial testing," as he conducted more than 2,000 glider flights, sometimes traveling more than a thousand feet. He died in 1896 after breaking his spine during a crash landing.Flying machines are also known as mechanical birds and airships, and are occasionally called by more colorful names such as the Artificial Albatross. Enthusiasm for flying machines remains high, as aeronautical buffs still build early flying machines today.The cover image and chapter opening graphics are from the Dover Pictorial Archive. The cover font is Adobe ITC Garamond. The text font is Adobe Minion Pro; the heading font is Adobe Myriad Condensed; and the code font is Dalton Maag's Ubuntu Mono.