Search icon CANCEL
Arrow left icon
Explore Products
Best Sellers
New Releases
Books
Videos
Audiobooks
Learning Hub
Conferences
Free Learning
Arrow right icon
Hands-On System Programming with C++
Hands-On System Programming with C++

Hands-On System Programming with C++: Build performant and concurrent Unix and Linux systems with C++17

eBook
€22.99 €32.99
Paperback
€41.99
Subscription
Free Trial
Renews at €18.99p/m

What do you get with Print?

Product feature icon Instant access to your digital eBook copy whilst your Print order is Shipped
Product feature icon Paperback book shipped to your preferred address
Product feature icon Download this book in EPUB and PDF formats
Product feature icon Access this title in our online reader with advanced features
Product feature icon DRM FREE - Read whenever, wherever and however you want
Table of content icon View table of contents Preview book icon Preview Book

Hands-On System Programming with C++

Learning the C, C++17, and POSIX Standards

As stated in Chapter 1, Getting Started with System Programming, system programming is the act of making system calls to perform various actions in coordination with the underlying operating system. Each operating system has its own set of system calls, and how these system calls are made is different.

To prevent the system programmer from having to rewrite their program for each different operating system, several standards have been put into place that wrap the operating system's ABI with a well-defined API.

In this chapter, we will discuss three standards—the C standard, the C++ standard, and the POSIX standard. The C and POSIX standards provide the fundamental language syntax and APIs that wrap an operating system's ABI. Specifically, the C standard defines program linking and execution, the standard C syntax (which...

Technical requirements

Beginning with the C standard language

The C programming language is one of the oldest languages available. Unlike other higher-level languages, C is similar enough to assembly language programming, while still providing some high-level programming abstractions, that it has become a firm favorite among system, embedded, and kernel-level programmers alike.

Almost every major operating system is rooted in C. In addition, most higher-level languages, including C++, build upon C to provide their higher-level constructs, and therefore still require some of the components of the C standard.

The C standard is a huge standard that is managed by the International Organization for Standardization (ISO). We assume the reader has some basic knowledge of the C standard and how to write C code: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf.

For these reasons, the goal of this...

Learning about the C++ standard

The C++ programming language (originally called C with Classes) was designed specifically to provide higher-level facilities than C, including better type safety and object-oriented programming, with system programming in mind. Specifically, C++ aims to provide the performance and efficiency of C programs, while still providing the features of higher-level languages.

Today, C++ is one of the most popular programming languages in the world, used in everything from avionics to banking.

Like the C standard, the C++ standard is huge and is managed by the ISO. We assume the reader has some basic knowledge of the C++ standard and how to write C code: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf.

For these reasons, the goal of this section is to discuss some topics that are discussed in lesser detail in other books, as well as portions...

Beginning with the POSIX standard

The POSIX standard defines all of the functionality a POSIX-compliant operating system must implement. With respect to system programming, the POSIX standard defines the system call interface (that is, the APIs, not the ABIs) that the operating system must support.

Under the hood, most of the system-level APIs that C and C++ provide actually execute POSIX functions, or are POSIX functions themselves (as is this case with a lot of C library APIs). In fact, libc is generally considered to be a subset of the greater POSIX standard, while C++ leverages libc and POSIX to implement its higher-level APIs such as threading, memory management, error handling, file operations, and input/output. For more information, refer to https://ieeexplore.ieee.org/document/8277153/.

In this section, we will discuss some components of the POSIX standard that are relevant...

Summary

In this chapter, we learned about three different standards: C, C++, and POSIX. The C standard defines the popular C syntax, C-style program linking and execution, and the standard C libraries that provide cross-platform APIs to wrap an operating system's ABIs.

We also learned about the C++ standard, and how it defines the C++ syntax, program linking and execution, and the high-level C++ APIs that wrap underlying C and POSIX APIs to C++.

Finally, we saw how the POSIX standard provides additional APIs that go beyond C. These APIs include (but are not limited to) memory management, networking, and threading. In general, the POSIX standard defines all the standards needed for an application to perform its functions in a cross-platform way on any POSIX-compliant operating system.

The remainder of this book will focus on the APIs defined in these standards, and how they...

Questions

  1. Is the C standard part of the POSIX standard? If so, name an API that is common to both standards.
  2. What is the difference between the _start() and main() functions?
  3. List one of the responsibilities of the C runtime?
  4. Are global constructors executed before or after the main() function?
  5. What is C++ name mangling, and why is it needed?
  6. Name one difference between C and C++ program linking.
  7. What is the difference between a pointer and a reference?
Left arrow icon Right arrow icon
Download code icon Download Code

Key benefits

  • Write system-level code leveraging C++17
  • Learn the internals of the Linux Application Binary Interface (ABI) and apply it to system programming
  • Explore C++ concurrency to take advantage of server-level constructs

Description

C++ is a general-purpose programming language with a bias toward system programming as it provides ready access to hardware-level resources, efficient compilation, and a versatile approach to higher-level abstractions. This book will help you understand the benefits of system programming with C++17. You will gain a firm understanding of various C, C++, and POSIX standards, as well as their respective system types for both C++ and POSIX. After a brief refresher on C++, Resource Acquisition Is Initialization (RAII), and the new C++ Guideline Support Library (GSL), you will learn to program Linux and Unix systems along with process management. As you progress through the chapters, you will become acquainted with C++'s support for IO. You will then study various memory management methods, including a chapter on allocators and how they benefit system programming. You will also explore how to program file input and output and learn about POSIX sockets. This book will help you get to grips with safely setting up a UDP and TCP server/client. Finally, you will be guided through Unix time interfaces, multithreading, and error handling with C++ exceptions. By the end of this book, you will be comfortable with using C++ to program high-quality systems.

Who is this book for?

If you are a fresh developer with intermediate knowledge of C++ but little or no knowledge of Unix and Linux system programming, this book will help you learn system programming with C++ in a practical way.

What you will learn

  • Understand the benefits of using C++ for system programming
  • Program Linux/Unix systems using C++
  • Discover the advantages of Resource Acquisition Is Initialization (RAII)
  • Program both console and file input and output
  • Uncover the POSIX socket APIs and understand how to program them
  • Explore advanced system programming topics, such as C++ allocators
  • Use POSIX and C++ threads to program concurrent systems
  • Grasp how C++ can be used to create performant system applications
Estimated delivery fee Deliver to Czechia

Premium delivery 7 - 10 business days

€25.95
(Includes tracking information)

Product Details

Country selected
Publication date, Length, Edition, Language, ISBN-13
Publication date : Dec 26, 2018
Length: 552 pages
Edition : 1st
Language : English
ISBN-13 : 9781789137880
Category :
Languages :
Tools :

What do you get with Print?

Product feature icon Instant access to your digital eBook copy whilst your Print order is Shipped
Product feature icon Paperback book shipped to your preferred address
Product feature icon Download this book in EPUB and PDF formats
Product feature icon Access this title in our online reader with advanced features
Product feature icon DRM FREE - Read whenever, wherever and however you want
Estimated delivery fee Deliver to Czechia

Premium delivery 7 - 10 business days

€25.95
(Includes tracking information)

Product Details

Publication date : Dec 26, 2018
Length: 552 pages
Edition : 1st
Language : English
ISBN-13 : 9781789137880
Category :
Languages :
Tools :

Packt Subscriptions

See our plans and pricing
Modal Close icon
€18.99 billed monthly
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Simple pricing, no contract
€189.99 billed annually
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Choose a DRM-free eBook or Video every month to keep
Feature tick icon PLUS own as many other DRM-free eBooks or Videos as you like for just €5 each
Feature tick icon Exclusive print discounts
€264.99 billed in 18 months
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Choose a DRM-free eBook or Video every month to keep
Feature tick icon PLUS own as many other DRM-free eBooks or Videos as you like for just €5 each
Feature tick icon Exclusive print discounts

Frequently bought together


Stars icon
Total 125.97
Hands-On System Programming with C++
€41.99
Hands-On System Programming with Linux
€41.99
Hands-On Design Patterns with C++
€41.99
Total 125.97 Stars icon

Table of Contents

15 Chapters
Getting Started with System Programming Chevron down icon Chevron up icon
Learning the C, C++17, and POSIX Standards Chevron down icon Chevron up icon
System Types for C and C++ Chevron down icon Chevron up icon
C++, RAII, and the GSL Refresher Chevron down icon Chevron up icon
Programming Linux/Unix Systems Chevron down icon Chevron up icon
Learning to Program Console Input/Output Chevron down icon Chevron up icon
A Comprehensive Look at Memory Management Chevron down icon Chevron up icon
Learning to Program File Input/Output Chevron down icon Chevron up icon
A Hands-On Approach to Allocators Chevron down icon Chevron up icon
Programming POSIX Sockets Using C++ Chevron down icon Chevron up icon
Time Interfaces in Unix Chevron down icon Chevron up icon
Learning to Program POSIX and C++ Threads Chevron down icon Chevron up icon
Error – Handling with Exceptions Chevron down icon Chevron up icon
Assessments Chevron down icon Chevron up icon
Other Books You May Enjoy Chevron down icon Chevron up icon

Customer reviews

Top Reviews
Rating distribution
Full star icon Full star icon Full star icon Full star icon Empty star icon 4
(7 Ratings)
5 star 57.1%
4 star 14.3%
3 star 14.3%
2 star 0%
1 star 14.3%
Filter icon Filter
Top Reviews

Filter reviews by




Jonathan L. Oct 27, 2019
Full star icon Full star icon Full star icon Full star icon Full star icon 5
This book is seriously good. I've boughten some sketchy Packt books before (books about Java Spring, for example, were rubbish), but this book restored my confidence in Packt Publishing. Dr. Rian Quinn knows his stuff. I bought this along with The C++ Standard Library. It is expensive but worth it if you want to see some good programming examples that are explained.
Amazon Verified review Amazon
SB Aug 25, 2019
Full star icon Full star icon Full star icon Full star icon Full star icon 5
This book brings together many little details which would truly strengthen foundations of any enterprise app developer. One errata — in one of the chapters, author says he talked about ELF in chapter 2, but he explains it later. So read forward and then read back. Gem of a book.
Amazon Verified review Amazon
T Lengyel Aug 02, 2019
Full star icon Full star icon Full star icon Full star icon Full star icon 5
Hands-On System Programming with C++ is a book I wish I had when I was first tasked with developing high-performance C++ applications for Linux. It is a very nice introduction to a modern version of C++, the Linux developer environment, and the Linux operating system in general. The book requires a basic understanding of programming concepts and of C/C++ but then examines these basic concepts from a system's perspective that regular programmers would not need to know the details of because it "just works".How exactly do integers and floating points look in memory? How is memory allocated on the stack and heap with C++? What happens during a system call? What happens during a function call?This book provides a great overview of concepts such as these. Gaining a deeper understanding is essential to the design of high-performance applications but also for anyone interested in security. A deep, system-level understanding of applications and operating systems is key to effective reverse engineering, memory forensics, and to learn how exploits work.I can highly recommend this book to anyone just starting out, but it's also fantastic as a refresher for more seasoned developers.
Amazon Verified review Amazon
paolo Aug 30, 2019
Full star icon Full star icon Full star icon Full star icon Full star icon 5
Pieno di esempi molto esaustivo negli argomenti trattati, un buon libro per rinfrescarsi le basi della programmazione in C++ e avere le informazioni di base su come lavorare su Linux
Amazon Verified review Amazon
S. Sakarya Nov 04, 2019
Full star icon Full star icon Full star icon Full star icon Empty star icon 4
It's an easy book to read and will help with your knowledge of C++17. It could have used some extra proofreading though, because there are numerous little errors and typos throughout the book. I like that it's aimed at Linux systems, but I would suggest making this more explicit in the title as there may be some people not using Linux. What I'm missing is Linux-specific fun stuff like epoll, SO_REUSEPORT, seccomp, etc, etc.Btw, a big no-no is teaching people a server example with one thread per connection, which is a horrible pattern for anyone aiming to work on anything high-traffic or high-performance, which one would assume would be the audience for this book. Otherwise one might as well use a scripting language instead of C++.I would consider this more of an introductory book to give a taste. It's a nice fit in one's library.
Amazon Verified review Amazon
Get free access to Packt library with over 7500+ books and video courses for 7 days!
Start Free Trial

FAQs

What is the delivery time and cost of print book? Chevron down icon Chevron up icon

Shipping Details

USA:

'

Economy: Delivery to most addresses in the US within 10-15 business days

Premium: Trackable Delivery to most addresses in the US within 3-8 business days

UK:

Economy: Delivery to most addresses in the U.K. within 7-9 business days.
Shipments are not trackable

Premium: Trackable delivery to most addresses in the U.K. within 3-4 business days!
Add one extra business day for deliveries to Northern Ireland and Scottish Highlands and islands

EU:

Premium: Trackable delivery to most EU destinations within 4-9 business days.

Australia:

Economy: Can deliver to P. O. Boxes and private residences.
Trackable service with delivery to addresses in Australia only.
Delivery time ranges from 7-9 business days for VIC and 8-10 business days for Interstate metro
Delivery time is up to 15 business days for remote areas of WA, NT & QLD.

Premium: Delivery to addresses in Australia only
Trackable delivery to most P. O. Boxes and private residences in Australia within 4-5 days based on the distance to a destination following dispatch.

India:

Premium: Delivery to most Indian addresses within 5-6 business days

Rest of the World:

Premium: Countries in the American continent: Trackable delivery to most countries within 4-7 business days

Asia:

Premium: Delivery to most Asian addresses within 5-9 business days

Disclaimer:
All orders received before 5 PM U.K time would start printing from the next business day. So the estimated delivery times start from the next day as well. Orders received after 5 PM U.K time (in our internal systems) on a business day or anytime on the weekend will begin printing the second to next business day. For example, an order placed at 11 AM today will begin printing tomorrow, whereas an order placed at 9 PM tonight will begin printing the day after tomorrow.


Unfortunately, due to several restrictions, we are unable to ship to the following countries:

  1. Afghanistan
  2. American Samoa
  3. Belarus
  4. Brunei Darussalam
  5. Central African Republic
  6. The Democratic Republic of Congo
  7. Eritrea
  8. Guinea-bissau
  9. Iran
  10. Lebanon
  11. Libiya Arab Jamahriya
  12. Somalia
  13. Sudan
  14. Russian Federation
  15. Syrian Arab Republic
  16. Ukraine
  17. Venezuela
What is custom duty/charge? Chevron down icon Chevron up icon

Customs duty are charges levied on goods when they cross international borders. It is a tax that is imposed on imported goods. These duties are charged by special authorities and bodies created by local governments and are meant to protect local industries, economies, and businesses.

Do I have to pay customs charges for the print book order? Chevron down icon Chevron up icon

The orders shipped to the countries that are listed under EU27 will not bear custom charges. They are paid by Packt as part of the order.

List of EU27 countries: www.gov.uk/eu-eea:

A custom duty or localized taxes may be applicable on the shipment and would be charged by the recipient country outside of the EU27 which should be paid by the customer and these duties are not included in the shipping charges been charged on the order.

How do I know my custom duty charges? Chevron down icon Chevron up icon

The amount of duty payable varies greatly depending on the imported goods, the country of origin and several other factors like the total invoice amount or dimensions like weight, and other such criteria applicable in your country.

For example:

  • If you live in Mexico, and the declared value of your ordered items is over $ 50, for you to receive a package, you will have to pay additional import tax of 19% which will be $ 9.50 to the courier service.
  • Whereas if you live in Turkey, and the declared value of your ordered items is over € 22, for you to receive a package, you will have to pay additional import tax of 18% which will be € 3.96 to the courier service.
How can I cancel my order? Chevron down icon Chevron up icon

Cancellation Policy for Published Printed Books:

You can cancel any order within 1 hour of placing the order. Simply contact customercare@packt.com with your order details or payment transaction id. If your order has already started the shipment process, we will do our best to stop it. However, if it is already on the way to you then when you receive it, you can contact us at customercare@packt.com using the returns and refund process.

Please understand that Packt Publishing cannot provide refunds or cancel any order except for the cases described in our Return Policy (i.e. Packt Publishing agrees to replace your printed book because it arrives damaged or material defect in book), Packt Publishing will not accept returns.

What is your returns and refunds policy? Chevron down icon Chevron up icon

Return Policy:

We want you to be happy with your purchase from Packtpub.com. We will not hassle you with returning print books to us. If the print book you receive from us is incorrect, damaged, doesn't work or is unacceptably late, please contact Customer Relations Team on customercare@packt.com with the order number and issue details as explained below:

  1. If you ordered (eBook, Video or Print Book) incorrectly or accidentally, please contact Customer Relations Team on customercare@packt.com within one hour of placing the order and we will replace/refund you the item cost.
  2. Sadly, if your eBook or Video file is faulty or a fault occurs during the eBook or Video being made available to you, i.e. during download then you should contact Customer Relations Team within 14 days of purchase on customercare@packt.com who will be able to resolve this issue for you.
  3. You will have a choice of replacement or refund of the problem items.(damaged, defective or incorrect)
  4. Once Customer Care Team confirms that you will be refunded, you should receive the refund within 10 to 12 working days.
  5. If you are only requesting a refund of one book from a multiple order, then we will refund you the appropriate single item.
  6. Where the items were shipped under a free shipping offer, there will be no shipping costs to refund.

On the off chance your printed book arrives damaged, with book material defect, contact our Customer Relation Team on customercare@packt.com within 14 days of receipt of the book with appropriate evidence of damage and we will work with you to secure a replacement copy, if necessary. Please note that each printed book you order from us is individually made by Packt's professional book-printing partner which is on a print-on-demand basis.

What tax is charged? Chevron down icon Chevron up icon

Currently, no tax is charged on the purchase of any print book (subject to change based on the laws and regulations). A localized VAT fee is charged only to our European and UK customers on eBooks, Video and subscriptions that they buy. GST is charged to Indian customers for eBooks and video purchases.

What payment methods can I use? Chevron down icon Chevron up icon

You can pay with the following card types:

  1. Visa Debit
  2. Visa Credit
  3. MasterCard
  4. PayPal
What is the delivery time and cost of print books? Chevron down icon Chevron up icon

Shipping Details

USA:

'

Economy: Delivery to most addresses in the US within 10-15 business days

Premium: Trackable Delivery to most addresses in the US within 3-8 business days

UK:

Economy: Delivery to most addresses in the U.K. within 7-9 business days.
Shipments are not trackable

Premium: Trackable delivery to most addresses in the U.K. within 3-4 business days!
Add one extra business day for deliveries to Northern Ireland and Scottish Highlands and islands

EU:

Premium: Trackable delivery to most EU destinations within 4-9 business days.

Australia:

Economy: Can deliver to P. O. Boxes and private residences.
Trackable service with delivery to addresses in Australia only.
Delivery time ranges from 7-9 business days for VIC and 8-10 business days for Interstate metro
Delivery time is up to 15 business days for remote areas of WA, NT & QLD.

Premium: Delivery to addresses in Australia only
Trackable delivery to most P. O. Boxes and private residences in Australia within 4-5 days based on the distance to a destination following dispatch.

India:

Premium: Delivery to most Indian addresses within 5-6 business days

Rest of the World:

Premium: Countries in the American continent: Trackable delivery to most countries within 4-7 business days

Asia:

Premium: Delivery to most Asian addresses within 5-9 business days

Disclaimer:
All orders received before 5 PM U.K time would start printing from the next business day. So the estimated delivery times start from the next day as well. Orders received after 5 PM U.K time (in our internal systems) on a business day or anytime on the weekend will begin printing the second to next business day. For example, an order placed at 11 AM today will begin printing tomorrow, whereas an order placed at 9 PM tonight will begin printing the day after tomorrow.


Unfortunately, due to several restrictions, we are unable to ship to the following countries:

  1. Afghanistan
  2. American Samoa
  3. Belarus
  4. Brunei Darussalam
  5. Central African Republic
  6. The Democratic Republic of Congo
  7. Eritrea
  8. Guinea-bissau
  9. Iran
  10. Lebanon
  11. Libiya Arab Jamahriya
  12. Somalia
  13. Sudan
  14. Russian Federation
  15. Syrian Arab Republic
  16. Ukraine
  17. Venezuela