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

系统编程完结整理

Shell(命令与脚本语法)

系统编程(一)shell的学习-CSDN博客

功能/概念语法/关键字参数/用法说明返回值/效果难易点注意事项示例/实验提示
定义函数func_name() { commands; }无参数或通过 $1 $2 ... 传参函数执行参数传递、全局变量return 只能返回整数状态定义函数打印参数,调用测试
调用函数func_name arg1 arg2传递参数$? 获取返回值参数数量、顺序函数内部修改全局变量调用函数后打印 $?
变量定义var=value字符串或数字保存变量空格、引号处理$var 获取变量值定义变量并打印
条件判断if [ condition ]; then ... fi[ ] 内支持 -f/-d/-z/-n条件为真执行 then[] 和 [[ ]] 区别空格必须严格判断文件是否存在
循环 forfor var in list; do ... donelist 可以是序列或数组遍历执行数组索引和序列生成注意 in 后空格for i in {1..5}; do echo $i; done
循环 whilewhile [ condition ]; do ... done条件表达式条件为真循环执行无限循环风险break/continue 使用while [ $i -le 5 ]; do echo $i; i=$((i+1)); done
重定向输出> / >>> 覆盖,>> 追加写入文件覆盖风险权限不足会失败echo "test" > file.txt
标准输入<文件输入命令读取文件输入格式文件必须存在sort < file.txt
管道`cmd1cmd2`cmd1 输出作为 cmd2 输入数据流传递阻塞问题多管道组合
数组arr=(a b c)${arr[i]} 访问保存多个值索引越界空格和引号注意循环打印数组元素
字符串操作${var#prefix} / ${var%suffix}删除前缀/后缀返回处理后字符串语法复杂注意 # 和 ## 区别删除路径前缀
函数返回状态return n0 成功,非0失败$? 获取返回值只能返回整数echo 输出不能作为 return函数 return 1 后 echo $?
exitexit n退出状态终止脚本执行区分函数 return 和脚本 exitexit 会终止整个脚本脚本中使用 exit 测试
条件表达式[ ] / [[ ]]文件测试 -f -d,字符串 -z -n,数字 -eq -ne返回 true/false[] vs [[ ]][[ ]] 支持 &&
运算符$(( expression ))算术运算返回整数结果括号用法空格问题i=$((i+1))
注释#单行注释多行需要多个 #写注释测试
读入read var从标准输入读取变量赋值输入回车问题-p 提示信息read name; echo $name

系统调用

系统编程(二)系统调用函数-CSDN博客

功能/概念函数/关键字参数说明返回值/效果难易点注意事项示例/实验提示
打开文件open(pathname, flags, mode)pathname, flags, mode成功返回 fd,失败 -1flags 与 mode 组合权限错误打开文件写入后关闭
读取文件read(fd, buf, count)fd, buf, count返回读取字节数,EOF 返回 0阻塞与非阻塞缓冲区大小读取文件内容打印
写文件write(fd, buf, count)fd, buf, count返回写入字节数管道写满阻塞注意长度和权限写入文件后查看
关闭文件close(fd)fd成功 0,失败 -1文件描述符复用不要重复使用 fd关闭后访问测试
创建进程fork()父返回子 PID,子返回 0父子执行顺序不确定栈/堆独立,fd 继承fork 后父子打印标识
替换进程映像exec() 系列参数数组以 NULL 结尾成功不返回,失败 -1参数和环境变量execl/execlp/execv/execvp 区别fork 后 exec ls -l
等待子进程wait() / waitpid()pid, &status, options返回子 PID防止僵尸exit 与 _exit 区别fork 后 wait 回收
退出进程exit(status) / _exit(status)status无返回exit 会刷新 stdioexit vs _exitfork 子进程调用测试
创建管道pipe(fd[2])fd[0] 读端, fd[1] 写端成功 0阻塞问题必须在 fork 前创建父写子读数据

进程与父子进程

系统编程(三):进程、父子关系与资源回收-CSDN博客

系统编程(三)进程的究极扩展-CSDN博客

功能/概念函数/关键字参数说明返回值/效果难易点注意事项示例/实验提示
进程创建fork() / vfork()父返回子 PID,子返回 0vfork 阻塞父进程栈/堆独立fork 打印 PID
父子继承文件描述符、环境变量继承资源fd 共享可能冲突注意关闭未用端父写文件,子读文件
独立资源栈、堆修改互不影响地址空间复制机制子修改堆不影响父子进程堆变量实验
回收子进程wait() / waitpid()pid, &status成功返回子 PID防止僵尸exit 与 _exit 区别fork 后 wait 回收

信号

系统编程(四)进程间通信-CSDN博客

功能/概念函数/关键字参数说明返回值/效果难易点注意事项示例/实验提示
信号注册signal(signum, handler)signum, handler成功返回旧 handler,失败 SIG_ERR异步执行避免非重入函数捕获 SIGINT 打印提示
高级信号sigaction(signum, act, oldact)signum, act, oldact成功返回 0配置复杂可阻塞信号捕获 SIGCHLD 防止僵尸
发送信号kill(pid, signum)pid, signum成功 0,失败 -1信号类型理解kill -9 强制结束fork 后子进程 kill
信号屏蔽sigprocmask(how, set, oldset)how: BLOCK/UNBLOCK成功 0阻塞与解除理解避免屏蔽关键屏蔽 SIGINT 测试

匿名管道(pipe)

系统编程(五)进程间通信-管道-CSDN博客

功能/概念函数/关键字参数说明返回值/效果难易点注意事项示例/实验提示
创建管道pipe(fd[2])fd[0] 读端,fd[1] 写端成功 0,失败 -1阻塞与非阻塞读写必须在 fork 前创建父写子读数据测试
读数据read(fd[0], buf, size)fd, buf, size成功返回读字节数,EOF 返回 0阻塞读,部分读读写顺序匹配子进程读取父进程写入的内容
写数据write(fd[1], buf, size)fd, buf, size成功返回写字节数阻塞写,管道满注意写入长度父进程写 hello
关闭管道close(fd)fd成功 0文件描述符复用父子各自关闭未用端关闭写端后子读 EOF

命名管道(FIFO)

系统编程(五)进程间通信-管道-CSDN博客

功能/概念函数/关键字参数说明返回值/效果难易点注意事项示例/实验提示
创建 FIFOmkfifo(path, mode)path:管道路径;mode:权限成功 0,失败 -1文件存在报错权限设置mkfifo /tmp/myfifo
打开管道open(path, flags)flags: O_RDONLY/O_WRONLY/O_NONBLOCK返回 fd阻塞 vs 非阻塞O_NONBLOCK 不同效果父写子读
读写数据read(fd, buf, size) / write(fd, buf, size)fd, buf, size成功返回字节数阻塞问题管道缓冲区满/空父写“hello”,子读并打印
删除管道unlink(path)path成功 0删除时仍被使用避免删除使用中管道删除 FIFO 后再访问测试

消息队列

系统编程(六)进程间通信-消息队列-CSDN博客

功能/概念函数/关键字参数说明返回值/效果难易点注意事项示例/实验提示
创建队列msgget(key, flags)key, flags返回队列 ID,失败 -1key 唯一IPC_CREAT 避免重复创建队列打印 ID
发送消息msgsnd(msqid, msgp, msgsz, msgflg)msqid, msgp, msgsz, msgflg成功 0队列满阻塞消息长度 ≤ 队列限制发送消息并查看接收
接收消息msgrcv(msqid, msgp, msgsz, msgtyp, msgflg)msqid, msgp, msgsz, msgtyp, msgflg返回接收字节数阻塞/非阻塞msgtyp 匹配接收指定类型消息
删除队列msgctl(msqid, IPC_RMID, NULL)msqid成功 0队列仍被使用确保无进程使用删除队列后访问测试

共享内存

系统编程(七)存储映射与共享内存-CSDN博客

功能/概念函数/关键字参数说明返回值/效果难易点注意事项示例/实验提示
创建共享内存shmget(key, size, flags)key, size, flags返回共享内存 IDkey 唯一性size 合理创建 1KB 共享内存
连接共享内存shmat(shmid, addr, flags)shmid, addr(NULL), flags返回指针并发访问使用前需初始化父写数据,子读数据
分离共享内存shmdt(addr)addr成功 0不重复分离确保不再使用子进程退出前 detach
删除共享内存shmctl(shmid, IPC_RMID, NULL)shmid成功 0仍被使用时删除删除前确保无进程使用删除后访问失败

存储映射

系统编程(七)存储映射与共享内存-CSDN博客

功能/概念函数/关键字参数说明返回值/效果难易点注意事项示例/实验提示
文件映射mmap(addr, length, prot, flags, fd, offset)addr, length, prot, flags, fd, offset返回映射起始地址,失败 MAP_FAILEDMAP_SHARED vs MAP_PRIVATEfd 必须可访问mmap 文件修改测试
解除映射munmap(addr, length)addr, length成功 0长度必须准确避免重复解除修改后 munmap 再访问
文件同步msync(addr, length, flags)addr, length, flags成功 0同步策略MS_SYNC 阻塞修改 mmap 区域同步到磁盘
匿名映射`mmap(NULL, length, prot, MAP_ANONYMOUSMAP_PRIVATE, -1, 0)`length, prot返回内存地址匿名映射无文件无 fd

线程(pthread)

系统编程(八)线程-CSDN博客

功能/概念函数/关键字参数说明返回值/效果难易点注意事项示例/实验提示
创建线程pthread_create(&thread, attr, start_routine, arg)thread, attr, start_routine, arg成功 0参数和返回值必须指针传参创建线程打印信息
退出线程pthread_exit(retval)retval无返回区分进程退出主线程 join在线程内部调用 pthread_exit
等待线程pthread_join(thread, &retval)thread, retval成功 0防止僵尸线程join 后回收资源多线程 join 打印返回值
分离线程pthread_detach(thread)thread成功 0分离线程不可 join避免资源泄漏detach 后线程自动回收
获取线程 IDpthread_self()返回线程 ID打印当前线程 ID

同步与互斥

系统编程(九)同步与互斥-CSDN博客

功能/概念函数/关键字参数说明返回值/效果难易点注意事项示例/实验提示
互斥锁初始化pthread_mutex_init(&mutex, attr)mutex, attr成功 0锁类型默认 PTHREAD_MUTEX_DEFAULT初始化锁后保护共享变量
加锁pthread_mutex_lock(&mutex)mutex成功 0阻塞锁,死锁风险必须解锁多线程共享资源加锁实验
尝试加锁pthread_mutex_trylock(&mutex)mutex成功 0,失败 EBUSY非阻塞避免死循环资源忙时 trylock
解锁pthread_mutex_unlock(&mutex)mutex成功 0忘记解锁死锁成对使用 lock/unlock修改共享变量再 unlock
条件变量初始化pthread_cond_init(&cond, attr)cond, attr成功 0条件变量配合 mutex必须加锁初始化后等待条件
等待条件pthread_cond_wait(&cond, &mutex)cond, mutex阻塞等待条件虚假唤醒与互斥锁配合线程等待条件变量,其他线程 signal
条件变量唤醒pthread_cond_signal(&cond) / pthread_cond_broadcast(&cond)cond唤醒一个或所有等待线程signal vs broadcast信号可能丢失一个线程 signal,多个线程等待


文章转载自:

http://d0f8IzI5.jytrb.cn
http://c7h7bC22.jytrb.cn
http://uvqQReqa.jytrb.cn
http://NMTwM2wb.jytrb.cn
http://CbBGMYQ8.jytrb.cn
http://HjECyC71.jytrb.cn
http://6Df9unWy.jytrb.cn
http://LaJIvn6A.jytrb.cn
http://Zc2KycIe.jytrb.cn
http://CnctQkDT.jytrb.cn
http://gnoIFCzt.jytrb.cn
http://3H4dIFlz.jytrb.cn
http://iv63NH59.jytrb.cn
http://B3qXfOLb.jytrb.cn
http://pH7whkXw.jytrb.cn
http://wZSD1mSU.jytrb.cn
http://7q6hk9Fa.jytrb.cn
http://o2tjMt2C.jytrb.cn
http://4Wb7DmQx.jytrb.cn
http://qytfoaGO.jytrb.cn
http://gWpMU09B.jytrb.cn
http://0aW5P2Je.jytrb.cn
http://K9aFCjc0.jytrb.cn
http://SlHWpwSn.jytrb.cn
http://67JMffEQ.jytrb.cn
http://LQ1SKomY.jytrb.cn
http://kkvNnzWw.jytrb.cn
http://1d5a8zJS.jytrb.cn
http://XH6YpGzW.jytrb.cn
http://HH9Jat9v.jytrb.cn
http://www.dtcms.com/a/383025.html

相关文章:

  • 阿里云视觉多模态理解大模型开发训练部署
  • leetcode_21 合并两个有序链表
  • Node.js实时截屏实现方案
  • 01数据结构-01背包问题
  • 20250914-01: Langchain概念:流式传输(Streaming)
  • 初步认识 Spring Boot 自动装配
  • 《突破Unity+腾讯云联机瓶颈:多人游戏同步延迟与数据安全的双维度优化》
  • 计算机算术9-浮点乘法
  • 第24课:项目实战与总结
  • 【深度学习|学习笔记】从背景→公式→性质→梯度→何时用哪一个→数值稳定性与常见坑方面描述sigmoid和softmax函数!(一)
  • C++宽度优先搜索算法:队列与优先级队列
  • 同步降压转换器原理
  • 人工智能训练师三级备考笔记
  • <基于深度学习的条纹图分析及其不确定性估计>-论文总结
  • 【愚公系列】《人工智能70年》020-语音识别的历史性突破(深度学习带来历史性突破)
  • 网络操作系统与分布式操作系统的区别
  • Spring Cloud Alibaba 实战:从 0 到 1 构建可监控的微服务体系
  • 分布式推理与量化部署
  • Kafka 实现从网络层到日志与位点的“全景拆解”
  • Python入门教程之赋值运算符
  • 机器学习系统设计:从需求分析到模型部署的完整项目流程
  • SpringMVC架构解析:从入门到精通(1)
  • Why Language Models Hallucinate 论文翻译
  • 从 WPF 到 Avalonia 的迁移系列实战篇5:Trigger、MultiTrigger、DataTrigger 的迁移
  • easyExcel动态应用案例
  • 目标计数论文阅读(2)Learning To Count Everything
  • 贪心算法应用:速率单调调度(RMS)问题详解
  • 【传奇开心果系列】基于Flet框架实现的用窗口管理器动态集中管理多窗口自定义组件模板特色和实现原理深度分析
  • [Android] 汉语大辞典3.2
  • 《嵌入式硬件(八):基于IMX6ULL的点灯操作》