Description

Book Synopsis
Beginning Linux Programming, Fourth Edition continues its unique approach to teaching UNIX programming in a simple and structured way on the Linux platform. Through the use of detailed and realistic examples, students learn by doing, and are able to move from being a Linux beginner to creating custom applications in Linux. The book introduces fundamental concepts beginning with the basics of writing Unix programs in C, and including material on basic system calls, file I/O, interprocess communication (for getting programs to work together), and shell programming. Parallel to this, the book introduces the toolkits and libraries for working with user interfaces, from simpler terminal mode applications to X and GTK+ for graphical user interfaces. Advanced topics are covered in detail such as processes, pipes, semaphores, socket programming, using MySQL, writing applications for the GNOME or the KDE desktop, writing device drivers, POSIX Threads, and kernel programming for the lates

Table of Contents

Acknowledgements x

Foreword xxiii

Introduction xxv

Chapter 1: Getting Started 1

An Introduction to UNIX, Linux, and GNU 1

What Is UNIX? 1

What Is Linux? 3

The GNU Project and the Free Software Foundation 3

Linux Distributions 4

Programming Linux 4

Linux Programs 5

Text Editors 6

The C Compiler 7

Development System Roadmap 8

Getting Help 14

Summary 16

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

Pipes 22

The Shell as a Programming Language 23

Interactive Programs 23

Creating a Script 24

Making a Script Executable 25

Shell Syntax 27

Variables 27

Conditions 31

Control Structures 34

Functions 46

Commands 49

Command Execution 68

Here Documents 73

Debugging Scripts 74

Going Graphical — The dialog Utility 75

Putting It All Together 81

Requirements 82

Design 82

Summary 91

Chapter 3: Working with Files 93

Linux File Structure 94

Directories 94

Files and Devices 95

System Calls and Device Drivers 96

Library Functions 97

Low-Level File Access 98

write 98

read 99

open 100

Initial Permissions 101

Other System Calls for Managing Files 106

The Standard I/O Library 109

fopen 110

fread 110

fwrite 111

fclose 111

fflush 111

fseek 112

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

chmod 120

chown 120

unlink, link, and symlink 121

mkdir and rmdir 121

chdir and getcwd 122

Scanning Directories 122

opendir 123

readdir 123

telldir 123

seekdir 124

closedir 124

Errors 127

strerror 127

perror 127

The /proc File System 128

Advanced Topics: fcntl and mmap 132

fcntl 132

mmap 133

Summary 135

Chapter 4: The Linux Environment 137

Program Arguments 137

getopt 140

getopt_long 142

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

Logging 163

Resources and Limits 167

Summary 173

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

Overview 183

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

Pseudo-Terminals 208

Summary 209

Chapter 6: Managing Text-Based Screens with curses 211

Compiling with curses 212

Curses Terminology and Concepts 213

The Screen 216

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

Keyboard Input 222

Windows 224

The WINDOW Structure 224

Generalized Functions 225

Moving and Updating a Window 225

Optimizing Screen Refreshes 229

Subwindows 230

The Keypad 232

Using Color 235

Redefining Colors 238

Pads 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

Summary 254

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

Deadlocks 280

Databases 281

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

Summary 309

Chapter 8: MySQL 311

Installation 312

MySQL Packages 312

Post-Install Configuration 314

Post-Installation Troubleshooting 319

MySQL Administration 320

Commands 320

Creating Users and Giving Them Permissions 325

Passwords 327

Creating a Database 328

Data Types 329

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

Summary 375

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

RCS 393

SCCS 399

Comparing RCS and SCCS 399

CVS 400

CVS Front Ends 404

Subversion 405

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

KDevelop 425

Other Environments 425

Summary 427

Chapter 10: Debugging 429

Types of Errors 429

General Debugging Techniques 430

A Program with Bugs 430

Code Inspection 433

Instrumentation 434

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

Assertions 452

Memory Debugging 453

ElectricFence 454

valgrind 455

Summary 459

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

Threads 480

Signals 481

Sending Signals 484

Signal Sets 489

Summary 493

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 503

Synchronization with Semaphores 503

Synchronization with Mutexes 508

Thread Attributes 512

Canceling a Thread 517

Threads in Abundance 520

Summary 524

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

Aims 554

Implementation 555

Client Interface Functions 558

The Server Interface, server.c 565

The Pipe 569

Application Summary 574

Summary 575

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

Semaphores 577

Semaphore Definition 579

A Theoretical Example 579

Linux Semaphore Facilities 580

Using Semaphores 582

Shared Memory 586

shmget 588

shmat 588

shmdt 589

shmctl 589

Message Queues 594

msgget 594

msgsnd 595

msgrcv 595

msgctl 596

The CD Database Application 599

Revising the Server Functions 600

Revising the Client Functions 602

IPC Status Commands 604

Displaying Semaphore Status 604

Displaying Shared Memory Status 604

Displaying Message Queue Status 605

Summary 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

select 635

Multiple Clients 638

Datagrams 642

Summary 644

Chapter 16: Programming GNOME Using GTK+ 645

Introducing X 645

X Server 646

X Client 646

X Protocol 646

Xlib 647

Toolkits 647

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

GtkWindow 662

GtkEntry 663

GtkSpinButton 666

GtkButton 668

GtkTreeView 672

GNOME Widgets 676

GNOME Menus 677

Dialogs 682

GtkDialog 682

Modal Dialog Box 684

Nonmodal Dialogs 685

GtkMessageDialog 686

CD Database Application 687

Summary 699

Chapter 17: Programming KDE Using Qt 701

Introducing KDE and Qt 701

Installing Qt 702

Signals and Slots 705

Qt Widgets 712

QLineEdit 712

Qt Buttons 716

QComboBox 721

QListView 724

Dialogs 727

QDialog 728

QMessageBox 730

QInputDialog 731

Using qmake to Simplify Writing Makefiles 733

Menus and Toolbars with KDE 733

CD Database Application Using KDE/Qt 738

MainWindow 738

AddCdDialog 742

LogonDialog 743

main.cpp 745

Summary 746

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

Summary 759

Index 761

Beginning Linux Programming 4th Edition

    Product form

    £27.20

    Includes FREE delivery

    RRP £32.00 – you save £4.80 (15%)

    Order before 4pm today for delivery by Fri 19 Jun 2026.

    A Paperback / softback by Neil Matthew, Richard Stones


      View other formats and editions of Beginning Linux Programming 4th Edition by Neil Matthew

      Publisher: John Wiley & Sons Inc
      Publication Date: 02/11/2007
      ISBN13: 9780470147627, 978-0470147627
      ISBN10: 0470147628

      Description

      Book Synopsis
      Beginning Linux Programming, Fourth Edition continues its unique approach to teaching UNIX programming in a simple and structured way on the Linux platform. Through the use of detailed and realistic examples, students learn by doing, and are able to move from being a Linux beginner to creating custom applications in Linux. The book introduces fundamental concepts beginning with the basics of writing Unix programs in C, and including material on basic system calls, file I/O, interprocess communication (for getting programs to work together), and shell programming. Parallel to this, the book introduces the toolkits and libraries for working with user interfaces, from simpler terminal mode applications to X and GTK+ for graphical user interfaces. Advanced topics are covered in detail such as processes, pipes, semaphores, socket programming, using MySQL, writing applications for the GNOME or the KDE desktop, writing device drivers, POSIX Threads, and kernel programming for the lates

      Table of Contents

      Acknowledgements x

      Foreword xxiii

      Introduction xxv

      Chapter 1: Getting Started 1

      An Introduction to UNIX, Linux, and GNU 1

      What Is UNIX? 1

      What Is Linux? 3

      The GNU Project and the Free Software Foundation 3

      Linux Distributions 4

      Programming Linux 4

      Linux Programs 5

      Text Editors 6

      The C Compiler 7

      Development System Roadmap 8

      Getting Help 14

      Summary 16

      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

      Pipes 22

      The Shell as a Programming Language 23

      Interactive Programs 23

      Creating a Script 24

      Making a Script Executable 25

      Shell Syntax 27

      Variables 27

      Conditions 31

      Control Structures 34

      Functions 46

      Commands 49

      Command Execution 68

      Here Documents 73

      Debugging Scripts 74

      Going Graphical — The dialog Utility 75

      Putting It All Together 81

      Requirements 82

      Design 82

      Summary 91

      Chapter 3: Working with Files 93

      Linux File Structure 94

      Directories 94

      Files and Devices 95

      System Calls and Device Drivers 96

      Library Functions 97

      Low-Level File Access 98

      write 98

      read 99

      open 100

      Initial Permissions 101

      Other System Calls for Managing Files 106

      The Standard I/O Library 109

      fopen 110

      fread 110

      fwrite 111

      fclose 111

      fflush 111

      fseek 112

      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

      chmod 120

      chown 120

      unlink, link, and symlink 121

      mkdir and rmdir 121

      chdir and getcwd 122

      Scanning Directories 122

      opendir 123

      readdir 123

      telldir 123

      seekdir 124

      closedir 124

      Errors 127

      strerror 127

      perror 127

      The /proc File System 128

      Advanced Topics: fcntl and mmap 132

      fcntl 132

      mmap 133

      Summary 135

      Chapter 4: The Linux Environment 137

      Program Arguments 137

      getopt 140

      getopt_long 142

      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

      Logging 163

      Resources and Limits 167

      Summary 173

      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

      Overview 183

      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

      Pseudo-Terminals 208

      Summary 209

      Chapter 6: Managing Text-Based Screens with curses 211

      Compiling with curses 212

      Curses Terminology and Concepts 213

      The Screen 216

      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

      Keyboard Input 222

      Windows 224

      The WINDOW Structure 224

      Generalized Functions 225

      Moving and Updating a Window 225

      Optimizing Screen Refreshes 229

      Subwindows 230

      The Keypad 232

      Using Color 235

      Redefining Colors 238

      Pads 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

      Summary 254

      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

      Deadlocks 280

      Databases 281

      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

      Summary 309

      Chapter 8: MySQL 311

      Installation 312

      MySQL Packages 312

      Post-Install Configuration 314

      Post-Installation Troubleshooting 319

      MySQL Administration 320

      Commands 320

      Creating Users and Giving Them Permissions 325

      Passwords 327

      Creating a Database 328

      Data Types 329

      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

      Summary 375

      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

      RCS 393

      SCCS 399

      Comparing RCS and SCCS 399

      CVS 400

      CVS Front Ends 404

      Subversion 405

      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

      KDevelop 425

      Other Environments 425

      Summary 427

      Chapter 10: Debugging 429

      Types of Errors 429

      General Debugging Techniques 430

      A Program with Bugs 430

      Code Inspection 433

      Instrumentation 434

      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

      Assertions 452

      Memory Debugging 453

      ElectricFence 454

      valgrind 455

      Summary 459

      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

      Threads 480

      Signals 481

      Sending Signals 484

      Signal Sets 489

      Summary 493

      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 503

      Synchronization with Semaphores 503

      Synchronization with Mutexes 508

      Thread Attributes 512

      Canceling a Thread 517

      Threads in Abundance 520

      Summary 524

      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

      Aims 554

      Implementation 555

      Client Interface Functions 558

      The Server Interface, server.c 565

      The Pipe 569

      Application Summary 574

      Summary 575

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

      Semaphores 577

      Semaphore Definition 579

      A Theoretical Example 579

      Linux Semaphore Facilities 580

      Using Semaphores 582

      Shared Memory 586

      shmget 588

      shmat 588

      shmdt 589

      shmctl 589

      Message Queues 594

      msgget 594

      msgsnd 595

      msgrcv 595

      msgctl 596

      The CD Database Application 599

      Revising the Server Functions 600

      Revising the Client Functions 602

      IPC Status Commands 604

      Displaying Semaphore Status 604

      Displaying Shared Memory Status 604

      Displaying Message Queue Status 605

      Summary 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

      select 635

      Multiple Clients 638

      Datagrams 642

      Summary 644

      Chapter 16: Programming GNOME Using GTK+ 645

      Introducing X 645

      X Server 646

      X Client 646

      X Protocol 646

      Xlib 647

      Toolkits 647

      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

      GtkWindow 662

      GtkEntry 663

      GtkSpinButton 666

      GtkButton 668

      GtkTreeView 672

      GNOME Widgets 676

      GNOME Menus 677

      Dialogs 682

      GtkDialog 682

      Modal Dialog Box 684

      Nonmodal Dialogs 685

      GtkMessageDialog 686

      CD Database Application 687

      Summary 699

      Chapter 17: Programming KDE Using Qt 701

      Introducing KDE and Qt 701

      Installing Qt 702

      Signals and Slots 705

      Qt Widgets 712

      QLineEdit 712

      Qt Buttons 716

      QComboBox 721

      QListView 724

      Dialogs 727

      QDialog 728

      QMessageBox 730

      QInputDialog 731

      Using qmake to Simplify Writing Makefiles 733

      Menus and Toolbars with KDE 733

      CD Database Application Using KDE/Qt 738

      MainWindow 738

      AddCdDialog 742

      LogonDialog 743

      main.cpp 745

      Summary 746

      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

      Summary 759

      Index 761

      Recently viewed products

      © 2026 Book Curl

        • American Express
        • Apple Pay
        • Diners Club
        • Discover
        • Google Pay
        • Maestro
        • Mastercard
        • PayPal
        • Shop Pay
        • Union Pay
        • Visa

        Login

        Forgot your password?

        Don't have an account yet?
        Create account