linux(七)
来源:互联网 发布:超声波洗菜机 知乎 编辑:程序博客网 时间:2024/06/06 04:01
回顾: 1.信号的作用 2.理解信号: 软中断 可靠与不可靠信号kill -l 3.信号发送与注册kill/raise alarm setitimer signal 4.信号的屏蔽sigprocmask sigemptyset sigfillset ... 5.信号屏蔽的切换 sigpending sigsuspend =pause+ 指定屏蔽信号 pause与sigsuspend都回被信号中断. 中断的是pause与sigsuspen,不是进程中其他代码 sigsuspend放在sigprocmask环境中思考: 5.1.sigsuspend是否影响sigprocmask屏蔽的信号呢? 影响.使原来的屏蔽信号全部失效. 当sigsuspend返回,恢复原来的屏蔽信号. 5.2.sigsuspend什么时候使用?一.最新版本的信号发送与处理 sigqueue/sigaction 1.思考:信号中断函数调用中是否被其他信号中断. 信号函数调用中只屏蔽本身信号,不屏蔽其他信号.2.怎么保证函数调用中屏蔽指定的信号呢? sigaction可以指定处理函数调用的屏蔽信号 sigaction在处理信号的时候,接受数据. sigqueue发送信号的时候,可以发送数据. sigaction/sigqueue是signal/kill的增强版本3.函数说明 使用sigaction/sigqueue有两个理由. 3.1.稳定 3.2.增强功能 int sigaction( int sig,//被处理信号 const struct sigaction*action,//处理函数及其参数 struct sigaction*oldact//返回原来的处理函数结构体 ) 返回: 0:成功 -1:失败 struct sigaction { void (*sa_handle)(int); void (*sa_sigaction)(int,siginfo_t*,void*); sigset_t *mask;//屏蔽信号 int flags;//SA_SIGINFO void**//保留成员. }案例: 1.使用sigaction处理信号,使用kill发送信号 2.使用sigaction处理信号,使用sigqueue发送信号 3.发送信号的同时处理数据 二.IPC 1.基于文件 1.1.无序文件 1.1.有序文件 1.1.1.管道 1.1.1.1.有名 1.1.1.2.匿名 1.1.2.socket 2.基于内存 2.1.无序内存 2.1.1.匿名内存 2.1.2.共享内存 2.2.有序内存 2.2.1.共享队列 3.同步:基于内存IPC应用(共享内存数组) 信号量/信号灯三.基于普通文件的IPC IPC的技术提出的应用背景. 进程之间需要同步处理: 同步需要通信. 普通文件就是最基本的通信手段. 普通文件IPC技术的问题: 一个进程改变文件,另外一个进程无法感知. 解决方案: 一个特殊的文件:管道文件四.管道文件 1.创建管道mkfifo 2.体会管道文件特点 案例: fifoA fifoB 建立管道 打开管道 打开管道 写数据 读数据 关闭管道 关闭管道 删除管道 建立管道文件: 使用linux的指令mkfifo 总结: 1.read没有数据read阻塞,而且read后数据是被删除 2.数据有序 3.打开的描述符号可以读写(two-way双工) 4.管道文件关闭后,数据不持久. 5.管道的数据存储在内核缓冲中.五.匿名管道 发现有名的管道的名字仅仅是内核识别是否返回同一个fd的标示. 所以当管道名失去表示作用的时候,实际可以不要名字. 在父子进程之间:打开文件描述后创建进程. 父子进程都有描述符号. 管道文件没有价值. 所以在父子进程中引入一个没有名字的管道:匿名管道. 结论: 匿名管道只能使用在父子进程. 1.创建匿名管道 2.使用匿名管道案例: 匿名管道的创建 体会匿名管道的特点 int pipe(int fd[2]);//创建管道.打开管道.拷贝管道.关闭读写 fd[0]:只读(不能写) fd[1]:只写(不能读) 注意:数据无边界.
0 0
- linux 命令行(七)
- Linux复习(七)
- linux(七)
- Linux学习(七)
- Linux (七) 网络
- Linux Socket学习(七)
- Linux学习笔记(七)
- Linux Socket学习(七)
- Linux学习笔记(七)
- Linux学习笔记(七)
- Linux学习笔记(七)
- Linux操作命令(七)
- Linux内核分析(七)
- Linux学习笔记(七)
- Linux每日学习(七)
- Linux内核分析(七)
- Linux学习日志(七)
- Linux学习(文件七)
- 定时器的简单实现即回调函数的运用
- minHash(最小哈希)和LSH(局部敏感哈希)
- 利用keepalived实现双台服务器主备高可用
- HDOJ 2544 最短路(最短路径 dijkstra算法,SPFA邻接表实现,floyd算法)
- Ansible
- linux(七)
- 1079. Total Sales of Supply Chain (25)
- QObject 出现undefined vtable的解决方法
- Android-异步HttpClient框架(get/post)
- POJ 3648 Wedding(2-SAT 拓扑排序输出任意一种解决方案)
- 1084. Broken Keyboard (20)
- C Runtime Library 与 STL
- linux(八)
- hive学习笔记-表操作