
Linux
文章平均质量分 60
linux系统编程;linux网络编程
life is learning
这个作者很懒,什么都没留下…
展开
-
Linux多线程编程
线程的概念:轻量级的进程,一个进程内部可以有多个线程,默认情况下一个进程只有一个线程。 线程是最小的执行单位,进程是最小的系统资源分配单位。 内核实现都是通过clone函数实现的。 线程也有自己的PCB。 线程非共享资源: 线程id 处理器现场和栈指针(内核栈) 独立的栈空间(用户空间栈) errno变量 信号屏蔽字 调度优先级 线程的优点: 提高并发性 占用资源小 通信方便 线程的缺点: 调试困难 库函数,不稳定 对信号支持不好 缺点可以克服,优点很突出。 线程的操作函数 int pthread_crea原创 2021-02-07 22:50:56 · 167 阅读 · 0 评论 -
守护进程
会话:进程组的更高一级,多个进程组对应一个会话。 进程组:多个进程在同一个组,第一个进程默认是进程组的组长。 创建会话的时候,组长不可以创建,必须是组员创建。 创建会话的步骤:创建子进程,父进程退出,子进程自当会长。 守护进程的步骤(红色必须步骤): 1.创建子进程fork 2.父进程退出 3.子进程当会长setid 4.切换工作目录$HOME 5.设置掩码 umask 6.关闭文件描述符0,1,2,为了避免浪费资源 7.执行核心逻辑 8.退出 #include <stdio.h> #inclu原创 2021-02-07 22:47:58 · 91 阅读 · 0 评论 -
进程间通信--信号
特点:简单,不能带大量的信息,满足特定条件发生。 机制:进程B发送给进程A,内核产生信号,内核处理。 产生: 1.按键产生:ctrl+c ctrl+z ctrl+ 2.调用函数:kill raise abort 3.定时器:alarm setitimer 4.命令产生:kill 5.硬件异常:段错误,浮点型错误,总线错误,SIGPIPE 状态: 1.产生 2.递达 信号到达并且处理完 3.未决 信号被阻塞了 默认处理方式: 1.忽略 2.执行默认动作 3.捕获 4要素: 1.编号 2.事件 3.名称 4.默原创 2021-02-07 22:47:04 · 193 阅读 · 0 评论 -
进程间通信--mmap
//mmap.c #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/mman.h> #include <fcntl.h> #include <string.h> int main(int argc, char const *a原创 2021-02-07 22:39:49 · 411 阅读 · 0 评论 -
进程间通信--管道
pipe管道 实现原理: 内核借助环形队列机制,使用内核缓冲区实现。 特点: 1. 伪文件;2. 管道中的数据只能一次读取;3. 数据在管道中,只能单向流动。 局限性:1. 自己写,不能自己读;2. 数据不可以反复读;3. 半双工通信;4. 血缘关系进程间可用。 #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> int main(int ar原创 2021-02-07 22:35:39 · 181 阅读 · 0 评论 -
Linux多进程编程
fork函数 pid_t fork(void)创建子进程。父子进程各自返回。父进程返回子进程pid。 子进程返回 0。 #include <stdio.h> #include <unistd.h> #include <stdlib.h> int main() { printf("Begin... "); pid_t pid = fork(); if (pid < 0) { perror("fork err");原创 2021-02-07 21:52:42 · 112 阅读 · 0 评论