Tải bản đầy đủ (.pdf) (804 trang)

Wrox beginning linux programming 2nd edition sep 1999 ISBN 1861002971 pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.75 MB, 804 trang )


Table of Contents
Beginning Linux Programming, Second Edition.............................................................................................1
Foreword..............................................................................................................................................................5
Introduction.........................................................................................................................................................6
Welcome.................................................................................................................................................6
Who's this Book For?..............................................................................................................................6
What's Covered in the Book...................................................................................................................6
What You Need to Use this Book...........................................................................................................8
Source Code............................................................................................................................................9
Conventions............................................................................................................................................9
Tell Us What You Think.......................................................................................................................10
Why Should I Return the Reply Card?.................................................................................................10
Chapter 1: Getting Started.............................................................................................................................11
Overview...............................................................................................................................................11
What is UNIX?.....................................................................................................................................11
What is Linux?......................................................................................................................................11
Distributions..........................................................................................................................................11
The GNU Project and the Free Software Foundation...........................................................................12
Programming Linux..............................................................................................................................13
UNIX Programs....................................................................................................................................13
The C Compiler..............................................................................................................................14
Try It Out − Our First UNIX C Program........................................................................................14
How It Works..................................................................................................................................15
Getting Help..........................................................................................................................................15
Try It Out − Manual Pages and info................................................................................................16
Development System Roadmap............................................................................................................17
Programs.........................................................................................................................................17
Header Files....................................................................................................................................18
Library Files...................................................................................................................................19
Static Libraries...............................................................................................................................19


Try It Out − Static Libraries............................................................................................................20
Shared Libraries.............................................................................................................................22
UNIX Philosophy.................................................................................................................................23
Simplicity.......................................................................................................................................23
Focus..............................................................................................................................................23
Reusable Components....................................................................................................................23
Filters..............................................................................................................................................23
Open File Formats..........................................................................................................................23
Flexibility.......................................................................................................................................23
Summary...............................................................................................................................................24
Chapter 2: Shell Programming.......................................................................................................................25
Overview...............................................................................................................................................25
What is a Shell?....................................................................................................................................26
Pipes and Redirection...........................................................................................................................27
Redirecting Output.........................................................................................................................27
Redirecting Input............................................................................................................................28
Pipes...............................................................................................................................................28
i


Table of Contents
Chapter 2: Shell Programming
The Shell as a Programming Language................................................................................................29
Interactive Programs.......................................................................................................................29
Creating a Script.............................................................................................................................30
Making a Script Executable...........................................................................................................31
Shell Syntax..........................................................................................................................................32
Variables.........................................................................................................................................33
Conditions......................................................................................................................................36
Control Structures...........................................................................................................................38

Functions........................................................................................................................................49
Try It Out − A Simple Function......................................................................................................50
How It Works..................................................................................................................................50
Try It Out − Returning a Value.......................................................................................................51
How It Works..................................................................................................................................52
Commands......................................................................................................................................52
Command Execution......................................................................................................................62
Here Documents.............................................................................................................................66
Try It Out − Using Here Documents...............................................................................................66
Try It Out − Another Use for a Here Document.............................................................................67
How It Works..................................................................................................................................67
Debugging Scripts..........................................................................................................................67
Putting it All Together..........................................................................................................................68
Requirements..................................................................................................................................68
Design.............................................................................................................................................69
Try It Out − A CD Application.......................................................................................................70
Notes................................................................................................................................................76
Summary...............................................................................................................................................77
Chapter 3: Working with Files.......................................................................................................................78
Overview...............................................................................................................................................78
UNIX File Structure..............................................................................................................................78
Directories......................................................................................................................................79
Files and Devices............................................................................................................................79
System Calls and Device Drivers.........................................................................................................81
Library Functions..................................................................................................................................82
Low−level File Access..........................................................................................................................82
write.................................................................................................................................................83
read..................................................................................................................................................83
open.................................................................................................................................................84
Initial Permissions...........................................................................................................................85

umask...............................................................................................................................................86
close.................................................................................................................................................87
ioctl..................................................................................................................................................87
Try It Out − A File Copy Program..................................................................................................87
Other System Calls for Managing Files.........................................................................................89
The Standard I/O Library......................................................................................................................91
fopen................................................................................................................................................92
fread.................................................................................................................................................92
fwrite...............................................................................................................................................93
fclose...............................................................................................................................................93
ii


Table of Contents
Chapter 3: Working with Files
fflush................................................................................................................................................93
fseek.................................................................................................................................................93
fgetc, getc, getchar...........................................................................................................................94
fputc, putc, putchar..........................................................................................................................94
fgets, gets.........................................................................................................................................94
Formatted Input and Output...........................................................................................................95
Other Stream Functions..................................................................................................................98
Try It Out − Another File Copy Program.......................................................................................99
Stream Errors..................................................................................................................................99
Streams and File Descriptors........................................................................................................100
File and Directory Maintenance..........................................................................................................101
chmod............................................................................................................................................101
chown............................................................................................................................................101
unlink, link, symlink......................................................................................................................101
mkdir, rmdir...................................................................................................................................102

chdir, getcwd.................................................................................................................................102
Scanning Directories...........................................................................................................................103
opendir...........................................................................................................................................103
readdir............................................................................................................................................103
telldir.............................................................................................................................................104
seekdir...........................................................................................................................................104
closedir..........................................................................................................................................104
Try It Out − A Directory Scanning Program................................................................................105
How It Works................................................................................................................................106
Errors...................................................................................................................................................107
Advanced Topics................................................................................................................................107
fcntl................................................................................................................................................108
mmap.............................................................................................................................................109
Try It Out − Using mmap.............................................................................................................110
Summary.............................................................................................................................................111
Chapter 4: The UNIX Environment............................................................................................................112
Overview.............................................................................................................................................112
Program Arguments............................................................................................................................112
Try It Out − Program Arguments.................................................................................................113
How It Works................................................................................................................................114
getopt............................................................................................................................................114
Try It Out − getopt.......................................................................................................................115
How It Works................................................................................................................................116
Environment Variables.......................................................................................................................116
Try It Out − getenv and putenv0...................................................................................................117
Use of Environment Variables.....................................................................................................118
The environ Variable....................................................................................................................119
Try It Out − environ......................................................................................................................119
How It Works................................................................................................................................119
Time and Date.....................................................................................................................................119

Try It Out − time...........................................................................................................................120
How It Works................................................................................................................................121
Try It Out − gmtime.....................................................................................................................121
iii


Table of Contents
Chapter 4: The UNIX Environment
How It Works................................................................................................................................122
Try It Out − ctime.........................................................................................................................123
How It Works................................................................................................................................123
Try It Out − strftime and strptime................................................................................................125
How It Works................................................................................................................................126
Temporary Files..................................................................................................................................126
Try It Out − tmpnam and tmpfile.................................................................................................127
How It Works................................................................................................................................127
User Information.................................................................................................................................128
Try It Out − User Information.......................................................................................................129
How It Works................................................................................................................................130
Other User Information Functions...............................................................................................130
Host Information.................................................................................................................................131
Try It Out − Host Information.......................................................................................................131
How It Works................................................................................................................................132
Licensing......................................................................................................................................132
Logging...............................................................................................................................................132
Try It Out − syslog........................................................................................................................134
How It Works................................................................................................................................134
Configuring Logs.........................................................................................................................134
Try It Out − logmask.....................................................................................................................135
How It Works................................................................................................................................136

Resources and Limits..........................................................................................................................136
Try It Out − Resource Limits.......................................................................................................138
How It Works................................................................................................................................140
Summary.............................................................................................................................................140
Chapter 5: Terminals....................................................................................................................................141
Overview.............................................................................................................................................141
Reading from and Writing to the Terminal.........................................................................................141
Try It Out − Menu Routines in C..................................................................................................141
How It Works................................................................................................................................142
Why It Doesn't Quite Work...........................................................................................................143
Handling Redirected Output.........................................................................................................144
Try It Out − Checking for Output Redirection..............................................................................144
How It Works................................................................................................................................145
Talking to the Terminal................................................................................................................145
Try It Out − Using /dev/tty............................................................................................................146
The Terminal Driver and the General Terminal Interface..................................................................147
Overview......................................................................................................................................147
Hardware Model...........................................................................................................................148
The termios Structure..........................................................................................................................149
Input Modes..................................................................................................................................150
Output Modes...............................................................................................................................151
Control Modes..............................................................................................................................152
Local Modes.................................................................................................................................152
Special Control Characters...........................................................................................................153
Terminal Speed.............................................................................................................................156
Additional Functions....................................................................................................................156
iv


Table of Contents

Chapter 5: Terminals
Try It Out − A Password Program with termios...........................................................................157
How It Works................................................................................................................................158
Try It Out − Reading Each Character............................................................................................158
How It Works................................................................................................................................159
Terminal Output..................................................................................................................................159
Terminal Type..............................................................................................................................159
Identify Your Terminal Type.......................................................................................................160
Using terminfo Capabilities..........................................................................................................162
Detecting Keystrokes..........................................................................................................................167
Try It Out − Your Very Own kbhit...............................................................................................167
How It Works................................................................................................................................169
Pseudo Terminals.........................................................................................................................169
Summary.............................................................................................................................................169
Chapter 6: Curses..........................................................................................................................................170
Overview.............................................................................................................................................170
Compiling with curses........................................................................................................................170
Concepts..............................................................................................................................................171
Try It Out − A Simple curses Program.........................................................................................172
Initialization and Termination.............................................................................................................173
Output to the Screen............................................................................................................................173
Reading from the Screen.....................................................................................................................174
Clearing the Screen.............................................................................................................................175
Moving the Cursor..............................................................................................................................175
Character Attributes............................................................................................................................175
Try It Out − Moving, Inserting and Attributes..............................................................................176
The Keyboard......................................................................................................................................177
Keyboard Modes..........................................................................................................................177
Keyboard Input.............................................................................................................................178
Try It Out− Keyboard Modes and Input........................................................................................178

How It Works................................................................................................................................179
Windows.............................................................................................................................................180
The WINDOW Structure..............................................................................................................180
Generalized Functions..................................................................................................................180
Moving and Updating a Window.................................................................................................181
Try It Out − Multiple Windows....................................................................................................182
Optimizing Screen Refreshes.......................................................................................................184
Subwindows........................................................................................................................................185
Try It Out − Subwindows..............................................................................................................185
How It Works................................................................................................................................187
The Keypad.........................................................................................................................................187
Try It Out − Using the Keypad.....................................................................................................188
Color...................................................................................................................................................189
Try It Out − Colors.......................................................................................................................190
Redefining Colors.........................................................................................................................191
Pads.....................................................................................................................................................191
Try It Out − Using a Pad...............................................................................................................192
The CD Collection Application..........................................................................................................193
Try It Out − A New CD Collection Application...........................................................................194
v


Table of Contents
Chapter 6: Curses
Try It Out − Looking at main........................................................................................................196
Try It Out − The Menu..................................................................................................................196
Try It Out − Database File Manipulation.....................................................................................198
Try It Out − Querying the CD Database.......................................................................................202
Summary.............................................................................................................................................206
Chapter 7: Data Management......................................................................................................................207

Overview.............................................................................................................................................207
Managing Memory..............................................................................................................................207
Simple Memory Allocation..........................................................................................................207
Try It Out − Simple Memory Allocation......................................................................................208
How It Works................................................................................................................................208
Allocating Lots of Memory..........................................................................................................208
Try It Out − Asking for all Physical Memory..............................................................................209
How It Works................................................................................................................................209
Try It Out − Available Memory....................................................................................................210
How It Works................................................................................................................................210
Abusing Memory..........................................................................................................................211
Try It Out − Abuse Your Memory................................................................................................211
How It Works................................................................................................................................212
The Null Pointer...........................................................................................................................212
Try It Out − Accessing a Null Pointer..........................................................................................212
How It Works................................................................................................................................213
How It Works................................................................................................................................213
Freeing Memory...........................................................................................................................213
Try It Out − Freeing Memory.......................................................................................................214
How It Works................................................................................................................................214
Other Memory Allocation Functions...........................................................................................214
File Locking........................................................................................................................................215
Creating Lock Files......................................................................................................................215
Try It Out − Creating a Lock File.................................................................................................216
How It Works................................................................................................................................216
Try It Out − Cooperative Lock Files............................................................................................217
How It Works................................................................................................................................218
Locking Regions...........................................................................................................................218
Use of read and write with Locking.............................................................................................221
Try It Out − Locking a File with fcntl...........................................................................................221

How It Works................................................................................................................................222
Try It Out − Testing Locks on a File.............................................................................................223
How It Works................................................................................................................................225
Competing Locks.........................................................................................................................226
Try It Out − Competing Locks.....................................................................................................226
How It Works................................................................................................................................228
Other Lock Commands................................................................................................................228
Deadlocks.....................................................................................................................................229
Databases............................................................................................................................................229
The dbm Database........................................................................................................................229
The dbm Routines........................................................................................................................230
dbm Access Functions..................................................................................................................232
vi


Table of Contents
Chapter 7: Data Management
Additional dbm Functions............................................................................................................235
The CD Application............................................................................................................................237
The CD Application Using dbm...................................................................................................238
Try It Out − cd_data.h...................................................................................................................238
Try It Out − app_ui.c.....................................................................................................................239
Try It Out − cd_access.c...............................................................................................................247
Summary.............................................................................................................................................253
Chapter 8: Development Tools.....................................................................................................................254
Overview.............................................................................................................................................254
Problems of Multiple Source Files.....................................................................................................254
The make Command and Makefiles...................................................................................................255
The Syntax of Makefiles..............................................................................................................255
Options and Parameters to make..................................................................................................255

Comments in a makefile...............................................................................................................258
Macros in a makefile....................................................................................................................258
Try It Out − A Makefile with Macros...........................................................................................259
How It Works................................................................................................................................259
Multiple Targets...........................................................................................................................260
Try It Out − Multiple Targets........................................................................................................260
How It Works................................................................................................................................262
Built−in Rules..............................................................................................................................262
Suffix Rules..................................................................................................................................263
Try It Out − Suffix Rules..............................................................................................................263
How It Works................................................................................................................................264
Managing Libraries with make.....................................................................................................264
Try It Out − Managing a Library..................................................................................................264
How It Works................................................................................................................................265
Advanced Topic: Makefiles and Subdirectories..........................................................................266
GNU make and gcc......................................................................................................................266
Try It Out − gcc −MM...................................................................................................................267
How It Works................................................................................................................................267
Source Code Control...........................................................................................................................267
RCS..............................................................................................................................................267
SCCS............................................................................................................................................273
CVS..............................................................................................................................................274
Writing a Manual Page.......................................................................................................................278
Distributing Software..........................................................................................................................281
The patch Program.......................................................................................................................281
Other Distribution Utilities...........................................................................................................283
Summary.............................................................................................................................................285
Chapter 9: Debugging....................................................................................................................................286
Types of Error.....................................................................................................................................286
Specification Errors......................................................................................................................286

Design Errors................................................................................................................................286
Coding Errors...............................................................................................................................286
General Debugging Techniques..........................................................................................................287
A Program with Bugs...................................................................................................................287
vii


Table of Contents
Chapter 9: Debugging
Code Inspection............................................................................................................................289
Instrumentation.............................................................................................................................290
Try It Out − Debug Information....................................................................................................291
How It Works................................................................................................................................291
Controlled Execution....................................................................................................................292
Debugging with gdb............................................................................................................................293
Starting gdb..................................................................................................................................293
Running a Program.......................................................................................................................294
Stack Trace...................................................................................................................................294
Examining Variables....................................................................................................................295
Listing the Program......................................................................................................................296
Setting Breakpoints......................................................................................................................296
Patching with the Debugger.........................................................................................................299
Learning more about gdb.............................................................................................................300
More Debugging Tools.......................................................................................................................300
Lint: Removing the Fluff from Your Programs...........................................................................301
Function Call Tools......................................................................................................................302
Execution Profiling.......................................................................................................................304
Assertions............................................................................................................................................304
Problems with assert.....................................................................................................................305
Try It Out − assert........................................................................................................................305

How It Works................................................................................................................................306
Memory Debugging............................................................................................................................306
ElectricFence................................................................................................................................307
Try It Out − ElectricFence............................................................................................................307
How It Works................................................................................................................................308
Checker.........................................................................................................................................308
Try It Out − Checker.....................................................................................................................308
How It Works................................................................................................................................309
Resources............................................................................................................................................310
Summary.............................................................................................................................................310
Chapter 10: Processes and Signals...............................................................................................................311
Overview.............................................................................................................................................311
What is a Process?..............................................................................................................................311
Process Structure.................................................................................................................................311
The Process Table........................................................................................................................313
Viewing Processes........................................................................................................................313
System Processes..........................................................................................................................314
Process Scheduling.......................................................................................................................315
Starting New Processes.......................................................................................................................316
Try It Out − system.......................................................................................................................316
How It Works................................................................................................................................317
Replacing a Process Image............................................................................................................317
Try It Out − execlp.......................................................................................................................318
How It Works................................................................................................................................319
Duplicating a Process Image.........................................................................................................319
Try It Out − fork...........................................................................................................................320
How It Works................................................................................................................................321
viii



Table of Contents
Chapter 10: Processes and Signals
Waiting for a Process...................................................................................................................321
Try It Out − wait............................................................................................................................322
How It Works................................................................................................................................323
Zombie Processes.........................................................................................................................323
Try It Out − Zombies....................................................................................................................324
How It Works................................................................................................................................324
Input and Output Redirection.......................................................................................................325
Try It Out − Redirection...............................................................................................................325
How It Works................................................................................................................................326
Threads.........................................................................................................................................326
Signals.................................................................................................................................................326
Try It Out − Signal Handling.......................................................................................................328
How It Works................................................................................................................................329
Sending Signals............................................................................................................................330
Try It Out − An Alarm Clock........................................................................................................330
How It Works................................................................................................................................331
Signal Sets....................................................................................................................................334
Summary.............................................................................................................................................337
Chapter 11: POSIX Threads.........................................................................................................................338
What is a Thread?...............................................................................................................................338
Advantages and Drawbacks of Threads.......................................................................................338
Checking for Thread Support..............................................................................................................339
Try it out − POSIX compliance test..............................................................................................339
How it works.................................................................................................................................340
A First Threads Program.....................................................................................................................340
Try it out − a simple threaded program.........................................................................................342
How it works.................................................................................................................................343
Simultaneous Execution.....................................................................................................................344

Try it out − simultaneous execution of two threads......................................................................344
How it works.................................................................................................................................345
Synchronization..................................................................................................................................345
Synchronization with Semaphores...............................................................................................345
Try it out − a thread semaphore....................................................................................................347
How it works.................................................................................................................................349
Synchronization with Mutexes.....................................................................................................350
Try it out − a thread mutex............................................................................................................350
How it works.................................................................................................................................352
Thread Attributes................................................................................................................................353
detachedstate.................................................................................................................................354
schedpolicy....................................................................................................................................354
schedparam....................................................................................................................................355
inheritsched...................................................................................................................................355
scope..............................................................................................................................................355
stacksize.........................................................................................................................................355
Try it out − setting the detached state attribute.............................................................................355
How it works.................................................................................................................................356
Thread Attributes − Scheduling....................................................................................................357
Try is out − scheduling..................................................................................................................357
ix


Table of Contents
Chapter 11: POSIX Threads
How it works.................................................................................................................................357
Canceling a Thread.............................................................................................................................357
Try it out − canceling a thread......................................................................................................358
How it works.................................................................................................................................360
Threads in Abundance........................................................................................................................360

Try it out − many threads..............................................................................................................360
How it works.................................................................................................................................362
Summary.............................................................................................................................................363
Chapter 12: Inter−process Communication: Pipes....................................................................................364
Overview.............................................................................................................................................364
What is a Pipe?....................................................................................................................................364
Process Pipes.......................................................................................................................................365
popen.............................................................................................................................................365
pclose.............................................................................................................................................365
Try It Out − Reading Output From an External Program............................................................365
How It Works................................................................................................................................366
Sending Output to popen..............................................................................................................366
Try It Out − Sending Output to an External Program...................................................................366
How It Works................................................................................................................................367
The Pipe Call......................................................................................................................................369
Try It Out − The pipe Function.....................................................................................................370
How It Works................................................................................................................................371
Try It Out − Pipes across a fork...................................................................................................371
How It Works................................................................................................................................372
Parent and Child Processes.................................................................................................................372
Try It Out − Pipes and exec...........................................................................................................372
How It Works................................................................................................................................373
Reading Closed Pipes...................................................................................................................374
Pipes Used as Standard Input and Output....................................................................................374
Named Pipes: FIFOs...........................................................................................................................377
Try It Out − Creating a Named Pipe.............................................................................................378
How It Works................................................................................................................................378
Accessing a FIFO.........................................................................................................................378
Try It Out − Accessing a FIFO File.............................................................................................379
How It Works................................................................................................................................379

Advanced Topic: Client/Server using FIFOs......................................................................................385
Try It Out − An Example Client/Server Application...................................................................385
How It Works................................................................................................................................388
The CD Application............................................................................................................................388
Aims.............................................................................................................................................389
Implementation.............................................................................................................................390
Try It Out − The Header File, cliserv.h.........................................................................................392
Client Interface Functions............................................................................................................393
Try It Out − The Client's Interpreter.............................................................................................393
The Server Interface.....................................................................................................................399
Try It Out − server.c......................................................................................................................399
The Pipe........................................................................................................................................402
Try It Out − Pipes Implementation Header...................................................................................402
x


Table of Contents
Chapter 12: Inter−process Communication: Pipes
Application Summary...................................................................................................................407
Summary.............................................................................................................................................407
Chapter 13: Semaphores, Message Queues and Shared Memory.............................................................409
Semaphores.........................................................................................................................................409
Semaphore Definition...................................................................................................................410
A Theoretical Example.................................................................................................................410
UNIX Semaphore Facilities.........................................................................................................411
Using Semaphores........................................................................................................................413
Try It Out − Semaphores...............................................................................................................414
How It Works................................................................................................................................416
Semaphore Summary...................................................................................................................417
Shared Memory...................................................................................................................................417

Overview......................................................................................................................................417
Shared Memory Functions...........................................................................................................418
Shared Memory Summary............................................................................................................423
Message Queues..................................................................................................................................423
Overview......................................................................................................................................424
Message Queue Functions............................................................................................................424
Message Queue Summary............................................................................................................429
The Application..................................................................................................................................429
Try It Out − Revising the Server Functions..................................................................................429
Try It Out − Revising the Client Functions...................................................................................431
IPC Status Commands........................................................................................................................433
Semaphores..................................................................................................................................433
Shared Memory............................................................................................................................433
Message Queues...........................................................................................................................433
Summary.............................................................................................................................................434
Chapter 14: Sockets.......................................................................................................................................435
Overview.............................................................................................................................................435
What is a Socket?................................................................................................................................435
Socket Connections.............................................................................................................................435
Try It Out − A Simple Local Client..............................................................................................436
Try It Out − A Simple Local Server.............................................................................................437
Socket Attributes..........................................................................................................................439
Creating a Socket..........................................................................................................................441
Socket Addresses..........................................................................................................................442
Naming a Socket..........................................................................................................................442
Creating a Socket Queue..............................................................................................................443
Accepting Connections.................................................................................................................443
Requesting Connections...............................................................................................................444
Closing a Socket...........................................................................................................................445
Socket Communications...............................................................................................................445

Try It Out − Network Client..........................................................................................................446
How It Works................................................................................................................................446
Try It Out − Network Server........................................................................................................446
How It Works................................................................................................................................447
Host and Network Byte Ordering.................................................................................................447
xi


Table of Contents
Chapter 14: Sockets
Network Information..........................................................................................................................449
Try It Out − Network Information...............................................................................................450
How It Works................................................................................................................................451
Try It Out − Connecting to a Standard Service............................................................................452
How It Works................................................................................................................................453
The Internet Daemon....................................................................................................................453
Socket Options.............................................................................................................................454
Multiple Clients..................................................................................................................................454
Try It Out − A Server for Multiple Clients...................................................................................455
How It Works................................................................................................................................457
select...................................................................................................................................................457
Try It Out − select.........................................................................................................................458
How It Works................................................................................................................................460
Multiple Clients............................................................................................................................460
Try It Out − An Improved Multiple Client/Server........................................................................460
Summary.............................................................................................................................................463
Chapter 15: Tcl: Tool Command Language...............................................................................................464
Overview.............................................................................................................................................464
A Tcl Overview...................................................................................................................................464
Our First Tcl Program..................................................................................................................464

Tcl Commands.............................................................................................................................465
Variables and Values....................................................................................................................466
Quoting and Substitution..............................................................................................................467
Calculation....................................................................................................................................470
Control Structures.........................................................................................................................471
Error Handling..............................................................................................................................473
String Operations..........................................................................................................................474
Arrays...........................................................................................................................................479
Lists..............................................................................................................................................481
Procedures....................................................................................................................................486
Try It Out − Procedures................................................................................................................486
How It Works................................................................................................................................487
Input and Output...........................................................................................................................487
A Tcl Program.....................................................................................................................................491
Try It Out − A Concordance Program...........................................................................................491
How It Works................................................................................................................................493
Network Support...........................................................................................................................493
Try It Out − socket.......................................................................................................................494
How It Works................................................................................................................................494
Creating a New Tcl.............................................................................................................................494
Tcl Extensions.....................................................................................................................................494
expect............................................................................................................................................494
[incr Tcl].......................................................................................................................................495
TclX..............................................................................................................................................495
Graphics........................................................................................................................................495
Summary.............................................................................................................................................495

xii



Table of Contents
Chapter 16: Programming for X..................................................................................................................496
Overview.............................................................................................................................................496
What is X?...........................................................................................................................................496
X Server.........................................................................................................................................497
X Protocol......................................................................................................................................497
Xlib................................................................................................................................................497
X Clients........................................................................................................................................497
X Toolkits.....................................................................................................................................497
X Window Manager............................................................................................................................498
The X Programming Model................................................................................................................499
Start Up.........................................................................................................................................499
Main Loop....................................................................................................................................500
Clean Up.......................................................................................................................................500
Fast Track X Programming.................................................................................................................501
The Tk Toolkit....................................................................................................................................501
Windows Programming................................................................................................................502
Try It Out − Saying Hello.............................................................................................................503
How It Works................................................................................................................................503
Configuration Files.......................................................................................................................504
More Commands..........................................................................................................................504
Tk Widgets...................................................................................................................................505
Try It Out − Learning More..........................................................................................................505
How It Works................................................................................................................................506
Tk's Built−in Dialogs...................................................................................................................529
Color Chooser................................................................................................................................529
Get Open/Save Files......................................................................................................................530
Color Schemes..............................................................................................................................531
Fonts.............................................................................................................................................532
Bindings........................................................................................................................................532

BindTags......................................................................................................................................533
Geometry Management................................................................................................................535
Focus and Navigation...................................................................................................................537
Option Database...........................................................................................................................538
Inter−application Communication................................................................................................539
Selection.......................................................................................................................................539
Clipboard......................................................................................................................................540
Window Manager.........................................................................................................................541
Dynamic/Static Loading...............................................................................................................542
Safe Tk.........................................................................................................................................543
A Mega−Widget.................................................................................................................................544
Package File Generation................................................................................................................553
An Application Using the Tree Mega−Widget...................................................................................554
Tk Process Log Viewer.......................................................................................................................556
Internationalization.......................................................................................................................566
Where Now?.................................................................................................................................567
Tix.................................................................................................................................................567
[incr Tk].........................................................................................................................................567
BLT...............................................................................................................................................567
Summary.............................................................................................................................................568

xiii


Table of Contents
Chapter 17: Programming GNOME using GTK+.....................................................................................569
Overview.............................................................................................................................................569
An Introduction to GNOME...............................................................................................................569
The GNOME Architecture...........................................................................................................570
The GNOME Desktop..................................................................................................................571

Programming in GNOME using GTK+.......................................................................................572
An Application in GNOME.........................................................................................................586
Summary.............................................................................................................................................594
Chapter 18: The Perl Programming Language..........................................................................................595
Overview.............................................................................................................................................595
An Introduction to Perl.................................................................................................................595
A Full Example............................................................................................................................612
Perl on the Command Line...........................................................................................................617
Modules........................................................................................................................................618
The CD Database Revisited.........................................................................................................621
Summary.............................................................................................................................................625
Chapter 19: Programming for the Internet: HTML..................................................................................626
Overview.............................................................................................................................................626
What is the World Wide Web?...........................................................................................................626
Terminology........................................................................................................................................627
The HyperText Transfer Protocol (HTTP)...................................................................................627
Multimedia Internet Mail Extensions (MIME)............................................................................627
Standard Generalized Markup Language (SGML)......................................................................627
Document Type Definition (DTD)...............................................................................................627
HyperText Markup Language (HTML).......................................................................................627
Extensible Markup Language (XML)..........................................................................................628
Cascading Style Sheets (CSS)......................................................................................................628
Extensible Hypertext Markup Language (XHTML)....................................................................628
Uniform Resource Locator (URL)...............................................................................................628
Uniform Resource Identifier (URI)..............................................................................................628
Writing HTML....................................................................................................................................629
Try It Out − A Simple HTML Document....................................................................................629
How It Works................................................................................................................................629
A More Formal Look at HTML..........................................................................................................630
HTML Tags..................................................................................................................................631

Images..........................................................................................................................................637
Try It Out − Adding an Image......................................................................................................638
How It Works................................................................................................................................639
Tables...........................................................................................................................................639
Try It Out − A Table....................................................................................................................640
How It Works................................................................................................................................640
Try It Out − Another Table...........................................................................................................641
How It Works................................................................................................................................642
Anchors or Hyperlinks.................................................................................................................642
Try It Out − Anchors....................................................................................................................643
How It Works................................................................................................................................644
Combining Anchors and Images..................................................................................................644
Try It Out − Images as Anchors...................................................................................................644
xiv


Table of Contents
Chapter 19: Programming for the Internet: HTML
How It Works................................................................................................................................645
Non−HTML URLs.......................................................................................................................645
Anchors to Other Sites.................................................................................................................646
Try It Out − Links to Other Sites.................................................................................................646
How It Works................................................................................................................................647
Authoring HTML................................................................................................................................647
Serving HTML Pages.........................................................................................................................648
Networked HTML Overview.......................................................................................................648
Setting up a Server.......................................................................................................................649
Clickable Maps...................................................................................................................................650
Server−side Maps.........................................................................................................................650
Client−side Maps..........................................................................................................................651

Server−side Includes...........................................................................................................................651
Try It Out − Client−side Maps and Server−side Includes.............................................................652
How It Works................................................................................................................................654
Tips for Setting up WWW Pages........................................................................................................654
Summary.............................................................................................................................................655
Chapter 20: Internet Programming 2: CGI................................................................................................656
Overview.............................................................................................................................................656
FORM Elements.................................................................................................................................656
The FORM Tag............................................................................................................................657
The INPUT Tag............................................................................................................................657
The SELECT Tag.........................................................................................................................659
The TEXTAREA Tag..................................................................................................................660
A Sample Page....................................................................................................................................660
Try It Out − A Simple Query Form...............................................................................................660
How It Works................................................................................................................................662
Sending Information to the WWW Server..........................................................................................663
Information Encoding...................................................................................................................663
Server Program.............................................................................................................................663
Writing a Server−side CGI Program............................................................................................664
CGI Programs Using Extended URLs..........................................................................................669
Try It Out − A Query String.........................................................................................................669
Decoding the Form Data..............................................................................................................670
Try It Out − A CGI Decode Program in C....................................................................................671
How It Works................................................................................................................................675
Returning HTML to the Client...........................................................................................................676
Try It Out − Returning HTML to the Client.................................................................................677
Tips and Tricks...................................................................................................................................679
Making Sure your CGI Program Exits.........................................................................................679
Redirecting the Client...................................................................................................................679
Dynamic Graphics........................................................................................................................680

Hiding Context Information.........................................................................................................680
An Application....................................................................................................................................680
Try It Out − An HTML Database Interface.................................................................................680
How It Works................................................................................................................................683
Perl......................................................................................................................................................686
Try It Out A mod_perl Module....................................................................................................689
xv


Table of Contents
Chapter 20: Internet Programming 2: CGI
How it works.................................................................................................................................690
Summary.............................................................................................................................................691
Chapter 21: Device Drivers...........................................................................................................................692
Overview.............................................................................................................................................692
Devices................................................................................................................................................692
Device Classes..............................................................................................................................693
User and Kernel Space.................................................................................................................694
Character devices................................................................................................................................699
File Operations.............................................................................................................................700
A Sample Driver, Schar......................................................................................................................702
The MSG macro............................................................................................................................702
Registering the Device..................................................................................................................703
Module Usage Count.....................................................................................................................704
Open and Release..........................................................................................................................704
Reading the Device.......................................................................................................................705
The current Task............................................................................................................................706
Wait Queues..................................................................................................................................707
Writing to the Device....................................................................................................................708
Non−blocking Reads.....................................................................................................................709

Seeking..........................................................................................................................................709
ioctl................................................................................................................................................710
Checking User Rights....................................................................................................................712
poll.................................................................................................................................................712
Try it out reading and writing to Schar........................................................................................713
Try it out ioctl...............................................................................................................................714
Module Parameters........................................................................................................................715
Try it out modinfo........................................................................................................................716
proc file system interface..............................................................................................................716
Sysctl.............................................................................................................................................716
Writable Entries.............................................................................................................................717
How Schar Behaves......................................................................................................................718
Review..........................................................................................................................................718
Time and Jiffies...................................................................................................................................719
Small Delays.................................................................................................................................720
Timers...........................................................................................................................................721
Try it out The timer implementation in Schar..............................................................................722
Giving up the Processor...............................................................................................................723
Task Queues.................................................................................................................................724
The Predefined Task Queues........................................................................................................725
Review..........................................................................................................................................726
Memory Management.........................................................................................................................726
Virtual Memory Areas..................................................................................................................727
Address Space..............................................................................................................................727
Types of Memory Locations........................................................................................................728
Getting Memory in Device Drivers..............................................................................................728
Transferring Data Between User and Kernel Space.....................................................................730
Simple Memory Mapping............................................................................................................732
I/O Memory..................................................................................................................................734
xvi



Table of Contents
Chapter 21: Device Drivers
Assignment of Devices in Iomap.................................................................................................735
I/O Memory mmap.......................................................................................................................735
Try it out the Iomap module.........................................................................................................736
I/O Ports..............................................................................................................................................738
Portability.....................................................................................................................................739
Interrupt Handling........................................................................................................................739
The IRQ Handler..........................................................................................................................741
Bottom Halves..............................................................................................................................743
Reentrancy....................................................................................................................................743
Disabling Single Interrupts...........................................................................................................744
Atomicity......................................................................................................................................745
Protecting Critical Sections..........................................................................................................745
Block Devices.....................................................................................................................................747
Radimo A Simple RAM Disk Module........................................................................................747
Media Change...............................................................................................................................749
Ioctl for Block Devices.................................................................................................................750
The Request Function...................................................................................................................750
The Buffer Cache.........................................................................................................................752
Try it out Radimo.........................................................................................................................753
Going Further...............................................................................................................................754
Debugging...........................................................................................................................................754
Oops Tracing................................................................................................................................754
Debugging Modules.....................................................................................................................756
The Magic Key.............................................................................................................................756
Kernel Debugger KDB................................................................................................................757
Remote Debugging.......................................................................................................................757

General Notes on Debugging.......................................................................................................758
Portability............................................................................................................................................758
Data Types....................................................................................................................................758
Endianess......................................................................................................................................758
Alignment.....................................................................................................................................759
Continuing the Quest..........................................................................................................................759
Anatomy of the Kernel Source...........................................................................................................760
Appendix A: Portability................................................................................................................................761
Overview.............................................................................................................................................761
Language Portability...........................................................................................................................761
Preprocessor Symbols..................................................................................................................761
Reserved Names...........................................................................................................................762
Limits............................................................................................................................................763
Hardware Portability...........................................................................................................................763
Sizes..............................................................................................................................................764
Byte Order....................................................................................................................................765
char...............................................................................................................................................765
Union Packing..............................................................................................................................765
Structure Alignment.....................................................................................................................766
Pointer Sizes.................................................................................................................................766
Function Parameter Evaluation....................................................................................................767
Moving to C++....................................................................................................................................767
xvii


Table of Contents
Appendix A: Portability
Use the Compiler................................................................................................................................767
Programs are Read by People.............................................................................................................768
Appendix B: FSF and the GNU Project.......................................................................................................769

Overview.............................................................................................................................................769
The GNU Project................................................................................................................................769
The GNU Public License....................................................................................................................769
Appendix C: Internet Resources..................................................................................................................776
WWW Locations................................................................................................................................776
Linux Specific..............................................................................................................................776
Unix and General Programming...................................................................................................778
HTML & HTTP Information.......................................................................................................779
Newsgroups.........................................................................................................................................781
General UNIX Groups..................................................................................................................781
FTP Archive Sites...............................................................................................................................782
URLs for the Tools Mentioned in Chapter 9................................................................................782
Appendix D: Bibliography............................................................................................................................783
Standards.............................................................................................................................................783
Other Documentation and Resources..................................................................................................783
Books Worth a Look...........................................................................................................................783
And Finally, Three Books to Read away from the Computer............................................................784

xviii


Beginning Linux Programming, Second Edition
Neil Matthew
and
Richard Stones
Wrox Press Ltd. ®
© 1996 & 1999 Wrox Press
All rights reserved. No part of this book may be reproduced, stored in a retrieval system or transmitted in any
form or by any means, without the prior written permission of the publisher, except in the case of brief
quotations embodied in critical articles or reviews.

The authors and publisher have made every effort in the preparation of this book to ensure the accuracy of the
information. However, the information contained in this book is sold without warranty, either express or
implied. Neither the authors, Wrox Press nor its dealers or distributors will be held liable for any damages
caused or alleged to be caused either directly or indirectly by this book.
Printing History
First Published, September 1999
Second Reprint, July 2000
Latest Reprint, July 2001
Published by Wrox Press Ltd
Arden House, 1102 Warwick Road, Acock's Green, Birmingham B27 6BH, UK
Printed in United States
ISBN 1−861002−97−1
Trademark Acknowledgements
Wrox has endeavored to provide trademark information about all the companies and products mentioned in
this book by the appropriate use of capitals. However, Wrox cannot guarantee the accuracy of this
information.
Credits
Authors
Neil Matthew
Richard Stones

Technical Reviewers
Steve Caron
Stefaan Eeckels
Donal Fellows
Chris Harshman
David Hudson
Jonathan Kelly
Giles Lean
Marty Leisner


Contributing Authors
Jens Axboe
Simon Cozens
Andrew Froggatt
Krishna Vedati
1


Beginning Linux Programming, Second Edition
Ron McCarty
Bill Moss
Gavin Smyth
Chris Ullman
Bruce Varney
James Youngman

Editors
Martin Brooks
Louay Fatoohi
James Hart
Ian Maddison
Editors (First Edition)
Tim Briggs
Jon Hill
Julian Dobson

Index
Robin Smith
Design / Layout

Tom Bartlett
David Boyce
Mark Burdett
William Fallon
Jonathan Jones
John McNulty

Managing Editor
Paul Cooper
Development
John Franklin
Richard Collins

Cover Design
Chris Morris
Thanks to Larry Ewing () and the GIMP for the chapter divider.
"Some people have told me they don't think a fat penguin really embodies the grace of Linux, which just tells
me they have never seen an angry penguin charging at them in excess of 100mph. They'd be a lot more careful
about what they say if they had." Linus Torvalds announcing Linux 2.0
Code License
In recognition of the considerable value of software available for free under the GNU copyright restriction,
including the Linux kernel and many of the other programs that are needed to make a usable Linux system,
the authors have agreed with Wrox Press that all the example code in this book, although copyright is retained
by Wrox Press, may be reused under the terms of the GNU Public License, version 2 or later. Thus for all the
code printed in this book, the following license restriction applies:
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,

but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
A copy of the GNU General Public License may be found in Appendix B.

2


Beginning Linux Programming, Second Edition
About the Authors
Neil Matthew
Neil Matthew has been interested in and has programmed computers since 1974. A mathematics graduate
from the University of Nottingham, Neil is just plain keen on programming languages and likes to explore
new ways of solving computing problems. He's written systems to program in BCPL, FP (Function
Programming), Lisp, Prolog and a structured BASIC. He even wrote a 6502 microprocessor emulator to run
BBC microcomputer programs on UNIX systems.
In terms of UNIX experience, Neil has used almost every flavor since Version 6, including Xenix, SCO
flavors, Ultrix, BSD 4.2, Microport, System V, SunOS 4, Solaris and, of course, Linux. He's been a UNIX
system administrator on−and−off since 1983. Neil is familiar with the internals of UNIX−like systems and
was involved in the design and implementation of a intelligent communications controller for DEC Ultrix.
He can claim to have been using Linux since August 1993, when he acquired a floppy disk distribution of Soft
Landing (SLS) from Canada, with kernel version 0.99.11. He's used Linux−based computers for hacking C,
C++, Icon, Prolog and Tcl, at home and at work. He also uses and recommends Linux for Internet
connections, usually as a proxy caching server for Windows LANs and also as a file server to Windows
3.11/95 using SAMBA. He's sold a number of Internet firewall systems to UK companies (including Wrox!).
Most of Neil's 'home' projects were originally implemented in SCO UNIX, but they've been ported to Linux
with little or no trouble. He says Linux is much easier because it supports quite a lot of features from other
systems, so that both BSD and System V targeted programs will generally compile with little or no change.
As the head of software and principal engineer at Camtec Electronics in the Eighties, Neil programmed in C
and C++ for real−time embedded systems environments. Since then, he's worked on software development

techniques and quality assurance both as a consultant in communications software development with
Scientific Generics and as a software QA specialist for GEHE UK.
Neil is married to Christine and has two children, Alexandra and Adrian. He lives in a converted barn in
Northamptonshire. His interests include computers, music, science fiction, chess, squash, cars and not doing it
yourself.
Richard Stones
Rick started programming at school, more years ago than he cares to remember, on a BBC micro, which with
the help a few spare parts continued functioning for the next 15 years. He graduated from the University of
Nottingham with an Electronic Engineering degree, by which time he had decided that software was more fun
than hardware.
Over the years he has worked for a variety of companies, from the very small with just a few dozen
employees, to multinationals, including the IT services giant EDS. Along the way he has worked on a wide
range of different projects, from embedded real−time communications systems, through accounting systems,
to large help desk systems with multi−gigabyte databases. Many of these projects have either been hosted on
UNIX, or UNIX was the development environment. On one project the entire embedded software was
developed and tested on Linux, and only ported to the target hardware and minimal real−time executive in the
final stages. He is currently employed by the IT department of a pan−European wholesale and distribution
company as a systems architect.

3


Beginning Linux Programming, Second Edition
Ricks first experience of a UNIX style operating system was on a PDP 11/23+, after which BSD4.2 on a VAX
came as a pleasant improvement. After spells using UNIX System V.2, Xenix, SCO UNIX, AIX and a few
others, he first met Linux back in the kernel .99 days, and has been a fan ever since.
A bit of a programming linguist, he has programmed systems in SL−1, a couple of assemblers, Fortran,
Pascal, C, C++, Java, SQL and Perl. Under pressure he has also been known to admit to some familiarity with
Visual Basic, but tries not to advertise this aberration.
Rick lives in a Leicestershire village, with his wife Ann, two children, Jennifer and Andrew, and a pair of cats.

Outside work his passion is for classical music, especially early church music, and he does his best to find
time for some piano practice between lessons. He occasionally does the odd job for Wrox press.
Finally, both authors were co−authors of Instant UNIX (Wrox Press)
Authors Acknowledgements
The authors would like to thank the many people who helped make this book possible.
Neil's wife, Christine, for her understanding of the reasons why we had to write another book, and his children
Alexandra and Adrian for not being sad at losing their Dad for too many weekends.
Rick's wife, Ann, and children, Jennifer and Andrew, for their very considerable patience during the evenings
and weekends while this book was being written.
Heartfelt thanks are also due to Richard Neill, for his considerable assistance in reviewing early drafts of the
first edition, on which he made numerous helpful comments and suggestions. We would also like to pay
tribute to his wife, Angie, and son, Gavin, for putting up with us monopolizing his precious time.
As for the publishing team, we wish to thank the folk at Wrox Press, especially Julian, Tim and Jon for their
work on getting the first edition to fly, and Paul, Richard, James, Louay, and Martin for their enthusiasm and
editing work on the second edition.
We would also like to thank the people who have contributed additional material to the second edition −
Andrew, Jens, Krishna and Simon − and all the people who did excellent work reviewing the second edition.
Its certainly a better book than it would otherwise have been. Thanks guys!
We would also like to thank our one−time employers, Scientific Generics and Mobicom, for their support
during the creation of the first edition.
Neil and Rick would also like to pay homage to two important motivators who have helped make this book
possible. Firstly, Richard Stallman, for the excellent GNU tools and the idea of a free software environment.
Secondly, Linus Torvalds, for starting, and continuing to inspire the cooperative development that gives us the
ever−improving Linux Kernel.

4


Foreword
by Alan Cox

Every computer programmer has their own pile of notes and scribbles. They have their code examples saved
from the past heroic dive into the manuals or from Usenet − where sometimes even fools fear to follow (The
other body of opinion is that fools all get free Usenet access and use it non stop.) It is strange perhaps
therefore that so few books follow such a style. In the online world there are a lot of short, to the point,
documents about specific areas of programming and administration. The Linux documentation project
released a whole pile of three to ten page documents covering everything from installing Linux and NT on the
same machine to wiring your coffee machine to Linux. Seriously. Take a look in the mini−how−to index on
/>The book world, on the other hand, mostly seems to consist of either learned tomes − detailed and very
complete works that you don't have time to read, and dummies−style books − which you buy for friends as a
joke. There are very few books that try to cover the basics of a lot of useful areas. This book is one of them, a
compendium of those programmers notes and scribbles, deciphered (try reading programmer handwriting),
edited and brought together coherently as a book.
This updated second edition of the book has expanded, as Linux has expanded, and now covers writing
threaded programs (otherwise known as "how to shoot yourself in both feet at once") and the GTK toolkit
which is the basis of the GNOME GUI and probably the easiest way to write X windows applications in C.
Perl has crept into the book too. There are people who think Perl's time has come. There are those of us who
think Perl's time should have come and gone again a long time back. Regardless of my views, Perl has
become one of the most powerful (and at times arcane) scripting languages. All Linux programmers,
particularly anyone programming cgi scripts for the web, will meet Perl sooner or later so what better than a
Perl survival kit.
The final chapter is your chance to join the world of kernel programmers. As you will discover it isn't actually
that different to writing modules for large application programs. Put on your pointy hat, grow a beard, drink
Jolt Cola and come join in the fun.
Alan

5


Introduction
Welcome

Welcome to Beginning Linux Programming, an easy−to−use guide to developing programs for the Linux and
other UNIX−style operating systems.
In this book, we aim to give you an introduction to a wide variety of topics important to you as a developer
using UNIX. The word Beginning in the title refers more to the content than to your skill level. We've
structured the book to help you learn more about what UNIX has to offer, however much experience you have
already. UNIX programming is a large field and we aim to cover enough about a wide range of topics to give
you a good 'beginning' in each subject.

Who's this Book For?
If you're a programmer who wishes to get up to speed with the facilities that UNIX (and Linux) offers
software developers, to maximize your programming time and your application's use of the UNIX system,
you've picked up the right book. Clear explanations and a tried and tested step−by−step approach will help
you progress rapidly and pick up all the key techniques.
We assume that you know the basics of getting around in UNIX and, ideally, you'll already have some C or
C++ programming experience in a non−UNIX environment, perhaps MS−DOS or Microsoft Windows.
Where direct comparisons exist, these are indicated in the text.

Important

Watch out if you're new to UNIX. This isn't a book on installing or configuring Linux. If you
want to learn more about administering a UNIX system, UNIX concepts and UNIX commands in
general, you may want to take a look at Instant UNIX, by the same authors and Andrew Evans,
also published by Wrox Press (ISBN 1−874416−65−6).
As it aims to be both a tutorial guide to the various tools and sets of functions/libraries available to you on
most UNIX systems and also a handy reference to return to, this book is unique in its straightforward
approach, comprehensive coverage and extensive examples.

What's Covered in the Book
The book has a number of aims:
• To teach the use of the standard UNIX C libraries and other facilities as specified by the UNIX98

standard created from the earlier IEEE POSIX and X/Open (SPEC 1170) specifications.
• To show how to make the most of advanced development tools.
• To give concise introductions to popular rapid development languages like the shell, Tcl and Perl.
• To show how to build graphical user interfaces for the X Window System. We will use both Tk on
vanilla X and GTK+ for GNOME.
• Having given you firm grounding, to progress to topics of real−world applications which you want to
program.
As we cover these topics, we aim to introduce the theory and then illustrate it with an appropriate example and
a clear explanation. You can learn quickly on a first read, and look back over things to brush up on all the
essential elements again if you need to.
6


×