当前位置: 首页 > news >正文

旅游景点网站策划书香河住房与建设局网站

旅游景点网站策划书,香河住房与建设局网站,分析网站做的好坏,网站 代理 备案 费用吗Linux系统调用深度剖析与实践案例 目录 Linux系统调用深度剖析与实践案例 一、Linux系统调用概述 二、进程管理相关系统调用 1. fork():进程克隆与多任务处理 2. exec系列:程序加载与替换 3. wait/waitpid:进程状态同步 三、文件操作相关系统调用 1. 文件描述符操作…

Linux系统调用深度剖析与实践案例

目录

Linux系统调用深度剖析与实践案例

一、Linux系统调用概述

二、进程管理相关系统调用

1. fork():进程克隆与多任务处理

2. exec系列:程序加载与替换

3. wait/waitpid:进程状态同步

三、文件操作相关系统调用

1. 文件描述符操作(open/read/write)

2. 文件描述符重定向(dup/dup2)

四、系统资源监控调用

1. getrusage:获取资源使用统计

2. sysinfo:系统全局信息获取

五、高级系统调用应用

1. 进程线程管理(clone)

2. 内存管理(mmap/munmap)

六、Python调用Linux系统调用

1. 使用ctypes调用共享库

2. 使用cffi绑定C头文件

七、系统调用性能优化

1. 缓存系统调用结果

2. 减少系统调用次数

八、系统调用安全实践

1. 权限检查与错误处理

2. 使用chroot限制执行环境

九、系统调用调试技巧

1. strace工具使用

2. 内核日志分析(dmesg)

十、系统调用的现代演进

1. eBPF技术应用

2. SystemTap动态追踪

十一、典型应用场景

1. 实现简单的Shell

2. 实现进程监控器

十二、系统调用性能测试

1. 微基准测试

2. 系统调用开销对比

十三、系统调用的未来方向

十四、总结与建议

一、Linux系统调用概述

Linux系统调用是操作系统内核与用户空间程序之间的接口,是用户程序访问硬件资源和内核服务的唯一合法途径。系统调用通过中断机制(如int 0x80sysenter指令)将控制权从用户态切换到内核态,完成特定操作后返回结果。其核心价值体现在:

  1. 安全性:通过特权级切换(Ring3→Ring0)确保内核资源受保护
  2. 统一性:为所有应用程序提供标准化的接口规范
  3. 灵活性:支持进程管理、文件操作、网络通信等200+系统调用
  4. 高效性:内核直接处理请求,避免不必要的上下文切换

二、进程管理相关系统调用

1. fork():进程克隆与多任务处理

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>int main() {pid_t pid = fork();if (pid < 0) {perror("Fork failed");return 1;} else if (pid == 0) {// 子进程printf("Child process PID: %d\n", getpid());execl("/bin/ls", "ls", "-l", NULL);perror("Exec failed"); // 如果execl失败才执行} else {// 父进程int status;wait(&status); // 等待子进程结束if (WIFEXITED(status)) {printf("Child exited with status: %d\n", WEXITSTATUS(status));}}return 0;
}

代码解析

  • fork()返回值语义:
    • <0:创建失败
    • =0:子进程视角
    • >0:父进程视角(返回子进程PID)
  • 写时复制(Copy-on-Write)机制:父子进程共享物理内存页,仅在修改时复制
  • execl()执行新程序时,当前进程映像被替换,参数传递需遵循NULL结尾的惯例

应用案例

  1. 并发服务器:通过fork()创建子进程处理客户端连接
  2. 批处理作业:并行执行多个计算任务
  3. Shell命令管道:创建多个子进程形成处理流水线

2. exec系列:程序加载与替换

#include <stdio.h>
#include <unistd.h>int main(int argc, char *argv[]) {if (argc < 2) {fprintf(stderr, "Usage: %s <command>\n", argv[0]);return 1;}char *args[] = {"/bin/sh", "-c", argv[1], NULL};execv(args[0], args);// 如果execv返回,说明执行失败perror("execv failed");return 1;
}

关键点

  • execv()参数传递方式:char *const argv[]
  • execve()支持环境变量传递
  • 执行失败时返回原进程上下文,需配合perror()进行错误诊断

3. wait/waitpid:进程状态同步

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>int main() {pid_t pids[5];for (int i = 0; i < 5; i++) {pids[i] = fork();if (pids[i] == 0) {sleep(1); // 模拟工作负载exit(i);}}for (int i = 0; i < 5; i++) {int status;pid_t child = waitpid(-1, &status, 0);if (WIFEXITED(status)) {printf("Child %d exited with code %d\n", child, WEXITSTATUS(status));}}return 0;
}

实现要点

  • waitpid(-1, ...)等待任意子进程
  • WNOHANG标志实现非阻塞等待
  • 僵尸进程处理:未被回收的退出进程会成为僵尸

三、文件操作相关系统调用

1. 文件描述符操作(open/read/write)

#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>int main() {int fd = open("test.txt", O_CREAT|O_WRONLY|O_TRUNC, 0644);if (fd == -1) {perror("open");return 1;}const char *data = "Hello, system call!";ssize_t bytes = write(fd, data, strlen(data));if (bytes == -1) {perror("write");close(fd);return 1;}lseek(fd, 0, SEEK_SET); // 将文件指针移回开头char buffer[100];bytes = read(fd, buffer, sizeof(buffer)-1);if (bytes == -1) {perror("read");} else {buffer[bytes] = '\0';printf("Read data: %s\n", buffer);}close(fd);return 0;
}

关键参数

  • O_CREAT:文件不存在则创建
  • O_APPEND:追加写入模式
  • O_NONBLOCK:非阻塞IO标志

2. 文件描述符重定向(dup/dup2)

#include <unistd.h>
#include <stdio.h>int main() {// 备份标准输出int stdout_copy = dup(STDOUT_FILENO);// 打开文件并重定向标准输出int fd = open("output.txt", O_CREAT|O_WRONLY|O_TRUNC, 0644);dup2(fd, STDOUT_FILENO);close(fd);printf("This will be written to output.txt\n");// 恢复标准输出dup2(stdout_copy, STDOUT_FILENO);close(stdout_copy);printf("This will be printed to console\n");return 0;
}

应用场景

  • Shell脚本输出重定向
  • 日志记录器实现
  • 安全审计(记录所有输出)
http://www.dtcms.com/a/457165.html

相关文章:

  • jvm双亲委派的含义
  • 【linux内核驱动day06-I2C】
  • Photoshop - Photoshop 工具栏(10)透视裁剪工具
  • 一种基于 RK3568+AI 的国产化充电桩安全智能交互终端的设计与实现,终端支持各种复杂的交互功能和实时数据处理需求
  • SSM动漫衍生品交易平台z25so(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • Canny边缘检测算法详解
  • 不止是 Python:聊聊 Node.js/Puppeteer 在爬虫领域的应用
  • MCP协议深度解析:AI时代的通用连接器
  • 首钢建设网站网站源码程序修改
  • Doris专题11- 数据导入概览
  • 厦门优化网站排名合肥网站改版
  • 详解Spring Security+OAuth2.0 和 sa-token
  • 临沂企业建站程序德国网站的后缀名
  • Day14_内核编译安装
  • 全面SEO优化指南:网站运营与前端开发的协同策略
  • 网站整站优化公司赣州平面设计公司
  • DAY03:【DL 第一弹】神经网络
  • 2018年下半年试题四:论NoSQL数据库技术及其应用
  • 如何检查网站死链网站建设技术咨询协议
  • 【MATLAB技巧】contour|等高线图绘制,使用示例和使用技巧
  • matlab计算算法的运行时间
  • 有人情味的网站北京大数据公司排行
  • 时间箭头 量子信息的不可逆扩散
  • iPhone 17 Pro Max 的影像升级全解:从长焦、前置聊到 ProRes RAW
  • 阿里巴巴国际站费用淘宝装修做代码的网站
  • 解决comet等待网络连接的问题
  • 【开题答辩全过程】以 爱宠宠物商店管理系统的设计与实现为例,包含答辩的问题和答案
  • Spring Boot Actuator+Micrometer:高并发下 JVM 监控体系的轻量化实践
  • 建设网站 深圳石家庄企业网站建设
  • 4分15秒!高质量超长视频生成取得颠覆突破!字节Self-Forcing++超基线50倍,效果炸裂!