O'Reilly Linux System Programming.pdf

(1246 KB) Pobierz
754164851 UNPDF
LINUX
Robert Love
Beijing Cambridge Farnham Köln Paris Sebastopol Taipei Tokyo
System Programming
754164851.003.png
Linux System Programming
by Robert Love
Copyright © 2007 O’Reilly Media, Inc. All rights reserved.
Printed in the United States of America.
Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472.
O’Reilly books may be purchased for educational, business, or sales promotional use. Online editions
are also available for most titles ( safari.oreilly.com ). For more information, contact our
corporate/institutional sales department: (800) 998-9938 or corporate@oreilly.com .
Editor: Andy Oram
Production Editor: Sumita Mukherji
Copyeditor: Rachel Head
Proofreader: Sumita Mukherji
Indexer: John Bickelhaupt
Cover Designer: Karen Montgomery
Interior Designer: David Futato
Illustrator: Jessamyn Read
Printing History:
September 2007: First Edition.
Nutshell Handbook, the Nutshell Handbook logo, and the O’Reilly logo are registered trademarks of
O’Reilly Media, Inc. The Linux series designations, Linux System Programming , images of the man in
the flying machine, and related trade dress are trademarks of O’Reilly Media, Inc.
Manyofthedesignationsusedbymanufacturersandsellerstodistinguishtheirproductsareclaimedas
trademarks. Where those designations appear in this book, and O’Reilly Media, Inc. was aware of a
trademark claim, the designations have been printed in caps or initial caps.
Whileeveryprecautionhasbeentakeninthepreparationofthisbook,thepublisherandauthorassume
no responsibility for errors or omissions, or for damages resulting from the use of the information
contained herein.
This book uses RepKover , a durable and flexible lay-flat binding.
ISBN-10: 0-596-00958-5
ISBN-13: 978-0-596-00958-8
[M]
754164851.004.png
Table of Contents
Foreword
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ix
Preface
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xi
1. Introduction and Essential Concepts
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
System Programming
1
APIs and ABIs
4
Standards
6
Concepts of Linux Programming
9
Getting Started with System Programming
22
2. File I/O
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
Opening Files
24
Reading via read()
29
Writing with write()
33
Synchronized I/O
37
Direct I/O
40
Closing Files
41
Seeking with lseek()
42
Positional Reads and Writes
44
Truncating Files
45
Multiplexed I/O
47
Kernel Internals
57
Conclusion
61
v
754164851.005.png 754164851.006.png
 
3. Buffered I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
User-Buffered I/O
62
Standard I/O
64
Opening Files
65
Opening a Stream via File Descriptor
66
Closing Streams
67
Reading from a Stream
67
Writing to a Stream
70
Sample Program Using Buffered I/O
72
Seeking a Stream
74
Flushing a Stream
75
Errors and End-of-File
76
Obtaining the Associated File Descriptor
77
Controlling the Buffering
77
Thread Safety
79
Critiques of Standard I/O
81
Conclusion
82
4. Advanced File I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
Scatter/Gather I/O
84
The Event Poll Interface
89
Mapping Files into Memory
95
Advice for Normal File I/O
108
Synchronized, Synchronous, and Asynchronous Operations
111
I/O Schedulers and I/O Performance
114
Conclusion
125
5. Process Management
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
126
The Process ID
126
Running a New Process
129
Terminating a Process
136
Waiting for Terminated Child Processes
139
Users and Groups
149
Sessions and Process Groups
154
Daemons
159
Conclusion
161
vi
|
Table of Contents
754164851.001.png
6. Advanced Process Management
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
162
Process Scheduling
162
Yielding the Processor
166
Process Priorities
169
Processor Affinity
172
Real-Time Systems
176
Resource Limits
190
7. File and Directory Management
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
196
Files and Their Metadata
196
Directories
212
Links
223
Copying and Moving Files
228
Device Nodes
231
Out-of-Band Communication
233
Monitoring File Events
234
8. Memory Management
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
243
The Process Address Space
243
Allocating Dynamic Memory
245
Managing the Data Segment
255
Anonymous Memory Mappings
256
Advanced Memory Allocation
260
Debugging Memory Allocations
263
Stack-Based Allocations
264
Choosing a Memory Allocation Mechanism
268
Manipulating Memory
269
Locking Memory
273
Opportunistic Allocation
277
9. Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
279
Signal Concepts
280
Basic Signal Management
286
Sending a Signal
291
Reentrancy
293
Signal Sets
295
Blocking Signals
296
Table of Contents
|
vii
754164851.002.png
Zgłoś jeśli naruszono regulamin