【Linux系统】系统编程

一、Linux 系统编程

Linux 的系统编程(Linux System Programming )是指直接与操作系统内核提供的 系统调用(System Calls)低级接口(Low-level Interfaces)交互的编程方式。它是介于应用程序开发和内核开发之间的一种编程层次,用来编写高性能、可靠并能直接控制系统资源的程序。

1. Linux 系统编程的核心概念

  1. 系统调用(System Call)

    • 系统调用是用户空间程序与内核空间通信的主要接口。
    • 常见的系统调用包括:
      • 文件操作:open(), read(), write(), close()
      • 进程控制:fork(), exec(), wait(), exit()
      • 内存管理:mmap(), brk()
      • 进程通信:pipe(), socket(), shmget()
    • 它们为程序提供了访问内核资源的手段。
  2. 用户空间与内核空间

    • 用户空间(User Space):应用程序运行的普通内存区域,不能直接访问硬件。
    • 内核空间(Kernel Space):操作系统核心的执行区域,负责管理硬件和资源。
    • 系统调用是两者之间受控的"桥梁"。

    用户空间不能直接操作硬件资源,必须通过"系统调用"进入内核空间,请求内核来完成操作。

  3. 文件描述符(File Descriptor, FD)

    • 在 Linux 中,几乎所有资源都被抽象为"文件",包括普通文件、设备、管道、socket。
    • 每打开一个资源,内核就分配一个整数型"文件描述符"。

2. Linux 系统调用常见分类

类别 典型接口 使用场景
文件与目录 open(), read(), write(), lseek(), stat() 文件读写、权限管理
进程管理 fork(), exec(), waitpid() 创建、执行其他程序
信号处理 signal(), sigaction() 异步事件通知(如 Ctrl+C)
多线程编程 pthread_create(), pthread_mutex_lock() 并发执行、多核利用
进程间通信 (IPC) 管道、命名管道、共享内存、消息队列、信号量 数据交换、协同工作
网络编程 socket(), bind(), connect(), send(), recv() TCP/UDP 通信
内存映射 mmap(), munmap() 高效文件访问或共享内存
时间与定时 gettimeofday(), clock_gettime() 计时与延时控制

3. 系统编程与应用编程的区别

对比点 系统编程 应用编程
层级 接近内核(使用系统调用) 基于库或框架
接口 POSIX 标准、C 接口 高级语言接口(Python、Qt 等)
目标 性能、控制力、资源管理 开发效率、易用性
示例 Shell、终端、守护进程 图形界面程序、网页应用
相关推荐
linux kernel6 小时前
第六部分:数据链路层
服务器·网络
聆风吟º10 小时前
CANN开源项目深度实践:基于amct-toolkit实现自动化模型量化与精度保障策略
运维·开源·自动化·cann
Coder个人博客10 小时前
Linux6.19-ARM64 mm mmu子模块深入分析
大数据·linux·车载系统·系统架构·系统安全·鸿蒙系统
较劲男子汉13 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
Doro再努力13 小时前
Vim 快速上手实操手册:从入门到生产环境实战
linux·编辑器·vim
wypywyp13 小时前
8. ubuntu 虚拟机 linux 服务器 TCP/IP 概念辨析
linux·服务器·ubuntu
风流倜傥唐伯虎13 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
Doro再努力14 小时前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim
senijusene14 小时前
Linux软件编程:IO编程,标准IO(1)
linux·运维·服务器
不像程序员的程序媛14 小时前
Nginx日志切分
服务器·前端·nginx