Files
system-programming/chp1/README.md
Fabio Scotto di Santolo 22a46c991d Update README.md
2025-06-28 09:45:41 +02:00

29 lines
1.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Chapter 1 Introduction and Core Concepts
## 🔧 What is System Programming?
- Low-level programming that interacts directly with the **kernel** and system libraries via **system calls**, typically written in **C**.
- Includes shell tools (bash, gcc, coreutils), daemons, webservers, etc.
## Why Learn It?
- Even in high-level environments (JS, Java, Python), understanding internal mechanisms leads to better, more efficient code.
- Still essential for core components of Linux systems: kernel, drivers, glibc, gcc.
## Core Elements
1. **System calls** entry points from user process to the kernel (e.g., `read()`, `write()`).
2. **C Library** (glibc) interface between user programs and system calls.
3. **C Compiler** (gcc) handles APIs, ABIs, and object formats.
## API vs ABI
- **API**: interface at the source code level (e.g., libc functions).
- **ABI**: binary layout and conventions (e.g., syscall invocation, parameter ordering). Defines compatibility between systems and architectures.
## Standards and Compatibility
- POSIX/SUS as a reference, but Linux is not officially certified.
- The **Linux Standard Base (LSB)** initiative extends POSIX/SUS to ensure binary compatibility across distributions.
## Linux Basics
- **Files**: name + inode, represented by **file descriptors** (int). Linear byte streams (no formatting).
- **Processes**: entities with address space, pid, users, groups, permissions, signals.
- **IPC**: inter-process communication mechanisms (pipe, FIFO, socket, shared memory, semaphores).
- **Error handling**: functions return values and set `errno`. Useful functions: `perror()`, `strerror()`, `strerror_r()`.