Beginning linux programming 4th edition

Beginning Linux Programming, 4th Edition

Print on Demand

Beginning Linux Programming, 4th Edition

ISBN: 978-0-470-14762-7 November 2007 816 Pages

Download Product Flyer

Description

About the Author

Rick Stones started programming at school (more years ago than he cares to remember) on a 6502-powered BBC micro, which, with the help of a few spare parts, continued to function for the next 15 years. He graduated from Nottingham University with a degree in Electronic Engineering, but decided software was more fun.
Over the years he has worked for a variety of companies, from the very small with just a dozen employees, to the very large, including the IT services giant EDS. Along the way he has worked on a range of projects, from real-time communications to accounting systems, to very large help desk systems. He is currently working as an IT architect, acting as a technical authority on various major projects for a large pan-European company.
A bit of a programming linguist, he has programmed in various assemblers, a rather neat proprietary telecommunications language called SL-1, some FORTRAN, Pascal, Perl, SQL, and smidgeons of Python and C++, as well as C. (Under duress he even admits that he was once reasonably proficient in Visual Basic, but tries not to advertise this aberration.)

Permissions

Request permission to reuse content from this site

Table of contents

Chapter 1: Getting Started 1

An Introduction to UNIX, Linux, and GNU 1

What Is Linux? 3

The GNU Project and the Free Software Foundation 3

Linux Distributions 4

Programming Linux 4

Linux Programs 5

The C Compiler 7

Development System Roadmap 8

Getting Help 14

Chapter 2: Shell Programming 17

Why Program with a Shell? 18

A Bit of Philosophy 18

What Is a Shell? 19

Pipes and Redirection 21

Redirecting Output 21

Redirecting Input 22

The Shell as a Programming Language 23

Interactive Programs 23

Creating a Script 24

Making a Script Executable 25

Shell Syntax 27

Control Structures 34

Command Execution 68

Here Documents 73

Debugging Scripts 74

Going Graphical — The dialog Utility 75

Putting It All Together 81

Chapter 3: Working with Files 93

Linux File Structure 94

Files and Devices 95

System Calls and Device Drivers 96

Library Functions 97

Low-Level File Access 98

Initial Permissions 101

Other System Calls for Managing Files 106

The Standard I/O Library 109

fgetc, getc, and getchar 112

fputc, putc, and putchar 112

fgets and gets 113

Formatted Input and Output 113

printf, fprintf, and sprintf 113

scanf, fscanf, and sscanf 115

Other Stream Functions 117

Stream Errors 119

Streams and File Descriptors 119

File and Directory Maintenance 120

unlink, link, and symlink 121

mkdir and rmdir 121

chdir and getcwd 122

Scanning Directories 122

The /proc File System 128

Advanced Topics: fcntl and mmap 132

Chapter 4: The Linux Environment 137

Program Arguments 137

Environment Variables 144

Use of Environment Variables 146

The environ Variable 147

Time and Date 148

Temporary Files 156

User Information 158

Host Information 161

Resources and Limits 167

Chapter 5: Terminals 175

Reading from and Writing to the Terminal 175

Talking to the Terminal 180

The Terminal Driver and the General Terminal Interface 182

Hardware Model 183

The termios Structure 184

Input Modes 186

Output Modes 186

Control Modes 187

Local Modes 188

Special Control Characters 188

Terminal Speed 192

Additional Functions 192

Terminal Output 196

Terminal Type 197

Identify Your Terminal Type 197

Using terminfo Capabilities 200

Detecting Keystrokes 205

Virtual Consoles 207

Chapter 6: Managing Text-Based Screens with curses 211

Compiling with curses 212

Curses Terminology and Concepts 213

Output to the Screen 216

Reading from the Screen 217

Clearing the Screen 218

Moving the Cursor 218

Character Attributes 218

The Keyboard 221

Keyboard Modes 221

Читайте также:  При установке windows перезагружается после загрузки файлов

Keyboard Input 222

The WINDOW Structure 224

Generalized Functions 225

Moving and Updating a Window 225

Optimizing Screen Refreshes 229

Using Color 235

Redefining Colors 238

The CD Collection Application 240

Starting a New CD Collection Application 240

Looking at main 243

Building the Menu 243

Database File Manipulation 245

Querying the CD Database 250

Chapter 7: Data Management 255

Managing Memory 255

Simple Memory Allocation 256

Allocating Lots of Memory 257

Abusing Memory 260

The Null Pointer 261

Freeing Memory 262

Other Memory Allocation Functions 264

File Locking 264

Creating Lock Files 265

Locking Regions 268

Use of read and write with Locking 271

Competing Locks 276

Other Lock Commands 280

The dbm Database 281

The dbm Routines 283

dbm Access Functions 283

Additional dbm Functions 287

The CD Application 289

Updating the Design 289

The CD Database Application Using dbm 290

Chapter 8: MySQL 311

MySQL Packages 312

Post-Install Configuration 314

Post-Installation Troubleshooting 319

MySQL Administration 320

Creating Users and Giving Them Permissions 325

Creating a Database 328

Creating a Table 330

Graphical Tools 333

Accessing MySQL Data from C 335

Connection Routines 337

Error Handling 341

Executing SQL Statements 342

Miscellaneous Functions 357

The CD Database Application 358

Creating the Tables 359

Adding Some Data 362

Accessing the Application Data from C 364

Chapter 9: Development Tools 377

Problems of Multiple Source Files 377

The make Command and Makefiles 378

The Syntax of Makefiles 378

Options and Parameters to make 379

Comments in a Makefile 382

Macros in a Makefile 382

Multiple Targets 384

Built-in Rules 387

Suffix and Pattern Rules 388

Managing Libraries with make 389

Advanced Topic: Makefiles and Subdirectories 391

GNU make and gcc 391

Source Code Control 392

Comparing RCS and SCCS 399

CVS Front Ends 404

Writing a Manual Page 406

Distributing Software 409

The patch Program 410

Other Distribution Utilities 411

RPM Packages 413

Working with RPM Package Files 414

Installing RPM Packages 415

Building RPM Packages 415

Other Package Formats 424

Development Environments 424

Other Environments 425

Chapter 10: Debugging 429

Types of Errors 429

General Debugging Techniques 430

A Program with Bugs 430

Code Inspection 433

Controlled Execution 436

Debugging with gdb 437

Starting gdb 437

Running a Program 438

Stack Trace 438

Examining Variables 439

Listing the Program 440

Setting Breakpoints 441

Patching with the Debugger 444

Learning More about gdb 445

More Debugging Tools 445

Lint: Removing the Fluff from Your Programs 446

Function Call Tools 449

Execution Profiling with prof/gprof 451

Memory Debugging 453

Chapter 11: Processes and Signals 461

What Is a Process? 461

Process Structure 462

The Process Table 463

Viewing Processes 463

System Processes 464

Process Scheduling 467

Starting New Processes 468

Waiting for a Process 475

Zombie Processes 477

Input and Output Redirection 479

Sending Signals 484

Signal Sets 489

Chapter 12: POSIX Threads 495

What Is a Thread? 495

Advantages and Drawbacks of Threads 496

A First Threads Program 497

Simultaneous Execution 501

Synchronization with Semaphores 503

Synchronization with Mutexes 508

Thread Attributes 512

Canceling a Thread 517

Threads in Abundance 520

Chapter 13: Inter-Process Communication: Pipes 525

What Is a Pipe? 525

Process Pipes 526

Sending Output to popen 528

Passing More Data 529

How popen Is Implemented 530

The Pipe Call 531

Parent and Child Processes 535

Reading Closed Pipes 536

Pipes Used as Standard Input and Output 537

Named Pipes: FIFOs 540

Accessing a FIFO 542

Advanced Topic: Client/Server Using FIFOs 549

The CD Database Application 553

Client Interface Functions 558

The Server Interface, server.c 565

Application Summary 574

Chapter 14: Semaphores, Shared Memory, and Message Queues 577

Semaphore Definition 579

A Theoretical Example 579

Linux Semaphore Facilities 580

Using Semaphores 582

Shared Memory 586

Message Queues 594

The CD Database Application 599

Revising the Server Functions 600

Revising the Client Functions 602

Читайте также:  Как запустить nfo файл windows 10

IPC Status Commands 604

Displaying Semaphore Status 604

Displaying Shared Memory Status 604

Displaying Message Queue Status 605

Chapter 15: Sockets 607

What Is a Socket? 608

Socket Connections 608

Socket Attributes 612

Creating a Socket 614

Socket Addresses 615

Naming a Socket 616

Creating a Socket Queue 617

Accepting Connections 617

Requesting Connections 618

Closing a Socket 619

Socket Communications 619

Host and Network Byte Ordering 622

Network Information 624

The Internet Daemon (xinetd/inetd) 629

Socket Options 631

Multiple Clients 632

Multiple Clients 638

Chapter 16: Programming GNOME Using GTK+ 645

Introducing X 645

Window Managers 647

Other Ways to Create a GUI — Platform-Independent Windowing APIs 648

Introducing GTK+ 648

GLib Type System 649

GTK+ Object System 650

Introducing GNOME 651

Installing the GNOME/GTK+ Development Libraries 652

Events, Signals, and Callbacks 655

Packing Box Widgets 658

GTK+ Widgets 661

GNOME Widgets 676

GNOME Menus 677

Modal Dialog Box 684

Nonmodal Dialogs 685

CD Database Application 687

Chapter 17: Programming KDE Using Qt 701

Introducing KDE and Qt 701

Installing Qt 702

Signals and Slots 705

Using qmake to Simplify Writing Makefiles 733

Menus and Toolbars with KDE 733

CD Database Application Using KDE/Qt 738

Chapter 18: Standards for Linux 747

The C Programming Language 748

A Brief History Lesson 748

The GNU Compiler Collection 749

gcc Options 749

Interfaces and the Linux Standards Base 751

LSB Standard Libraries 752

LSB Users and Groups 754

LSB System Initialization 754

The Filesystem Hierarchy Standard 755

Further Reading about Standards 758

Downloads

Beginning Linux Programming, 4th Edition
Zip file containing all the code for the book.
Download
Download File Correction pg 362
Code downloads for all chapters of this title are available here.
Download

Errata

Chapter Page Details Date Print Run
2 52 Error in Code
Try it Out: The Dot Command.
The first «echo $version», «ion» should be bold
14-Oct-2015
55 Error in Text
Try It Out, section 2

Currently reads: ?export2?
Should read: ?./export2? 02/23/2012 55 Error in Text
In the «How it works» section, second sentence:

HOW IT READS NOW:
. so when it subsequently invokes export1, the .

HOW IT SHOULD READ:
. so when it subsequently invokes export2, the . 12/28/2012 60 Error in Text
trap INT

trap — INT 9/17/09 60 Error in Text
The executed script print out
-«press interrupt (CTRL-C) to interrupt . «

Should be:
-«press interrupt (control-C) to interrupt . « 03/21/2010 2 62 Text correction: Error in Options under «The find Command»
The third entry in the table of Options near the bottom of the page, -maxdepths N
Should read -maxdepth N 3/12/14 68 Error in Text
Section 4:

The line reading «Proceeding from the heat-oppressed brain» should be deleted

Insert text: 02/23/2012 2 72 Text Correction: Error in Code
CURRENTLY READS:
bar
fud
usr/bin/X11/startx
startx
/usr/local/etc
/usr
SHOULD READ:
bar
fud
usr/bin/X11/startx
startx
/usr/local/etc/
/usr/ 10/02/14 2 90 Error in Code
(a line of code in the first grey box on the page)
Currently reads:
num_tracks=$(wc -l $temp_file)
Should Read
num_tracks=$(wc -l 2 90 Error in Code
(a line of code in the first grey box on the page)
Currently reads:
num_tracks=$(wc -l $temp_file)
Should Read:
num_tracks=$(wc -l 94 Error in Text
Second paragraph in «Directories» section:

You can see the inode number for a file using ln -i.

. using ls -i. 1/11/10 3 99 Error in Code
code snippet at the top:
46 should be 47 14-Oct-2015 142 Error in Text
Try It Out:
Text reading:
./longopt: invalid option — q
should be deleted 02/23/2012 346 Error in Text
Try It Out:
The output from the SELECT LAST_INSERT_ID(); command is given as:
14
15

To be consistent with the previous sequence of steps and results in the text, should be:
12
13 02/23/2012 347 Error in Text
At the bottom of the page:
We inserted childno 6
We inserted childno 7

To be consistent with the sequence of steps and results in the text, this should be:
We inserted childno 14
We inserted childno 15 02/23/2012 363 Error in Text
The line:

If the MySQL Query Browser is used, the semi-colon is not needed. It is required for the command-line client. 02/23/2012 386 Error in Text
In the 3rd paragraph, the sentence:
Here you don’t care too much about whether ensuring previous commands succeeded, so you can stick to the simpler form.
should be deleted. 02/23/2012 388-389 Error in Code
The code download for Makefile6 in chapter 9 contains some additional lines for managing rpm files and manual pages which are not mentioned in the book text or used by the examples in the book. These additional lines can be ignored. 02/23/2012 416 Error in Text
The sentences:
You can modify your earlier makefile, Makefile6, to add a new target to bundle the files into a tarball.
and
The final version of the makefile, simply called Makefile, follows:

should be replaced with:
You can modify your earlier makefile, Makefile5, to add a new target to bundle the files into a tarball.
and
The final version of the makefile, simply called Makefile, follows: 02/23/2012 487 Error in Code
About 2/3 down the page:

CURRENTLY READS:
void (*) (int) sa_handler

SHOULD READ:
void (*sa_handler)(int) 10/9/2013 Chapter 6 Code file Error in Code
In line 18 of the «chapter06/multiw1.c» source code file:
Currently reads:
refreshing the actual screen once the logical screen has been filled:
Should read:
refreshing the actual screen once the logical screen has been filled: */

Corrected file posted 02/23/2012 Chapter 7 Code file Error in Code
Line 42 of the chapter07/app/cd_data.h source code file:

Currently reads:
/* two for simple data retrival */
Should read:
/* two for simple data retrieval */ 02/23/2012 625 Error in Code
CURRENTLY READS:

SHOULD READ: 3/26/2013 623 Error in Text
First paragraph

Currently reads:
«However, the local address (the server socket) is given as 1574 (or you may see mvel-lm as a service name), but the port chosen in the example is 9734. Why are they different? The answer is that port numbers and addresses are communicated over socket interfaces as binary numbers. Different computers use different byte ordering for integers. For example, an Intel processor stores the 32-bit integer as four consecutive bytes in memory in the order 1-2-3-4, where 1 is the most significant byte. IBM PowerPC processors would store the integer in the byte order 4-3-2-1. If the memory used for integers were simply copied byte-by-byte, the two different computers would not be able to agree on integer values.»

Should read:
«However, the local address (the server socket) is given as 1574 (or you may see mvel-lm as a service name), but the port chosen in the example is 9734. Why are they different? The answer is that port numbers and addresses are communicated over socket interfaces as binary numbers. Different computers use different byte ordering for integers. For example, an IBM PowerPC processor stores the 32-bit integer as four consecutive bytes in memory in the order 1-2-3-4, where 1 is the most significant byte. Intel processors would store the integer in the byte order 4-3-2-1. If the memory used for integers were simply copied byte-by-byte, the two different computers would not be able to agree on integer values.» 01/02/2014 40 Errata in Text
Grey tip box at top of page currently reads:

In general, if a loop should should always execute at least once, use a while loop; if it may not need to execute at all, use an until loop.

Источник

Читайте также:  Whatsapp для windows skachat
Оцените статью