您的位置:首页 > 新闻 > 热点要闻 > 室内设计风格_查看楼盘卖房信息在哪查_seo排名优化怎么样_竞价推广员月挣多少

室内设计风格_查看楼盘卖房信息在哪查_seo排名优化怎么样_竞价推广员月挣多少

2025/3/9 9:14:39 来源:https://blog.csdn.net/m0_46676283/article/details/143356125  浏览:    关键词:室内设计风格_查看楼盘卖房信息在哪查_seo排名优化怎么样_竞价推广员月挣多少
室内设计风格_查看楼盘卖房信息在哪查_seo排名优化怎么样_竞价推广员月挣多少

本节重点:
1.进程间通信介绍
2.管道
3.消息队列
4.共享内存
5.信号量

1.进程间通信

1.1 进程间通信目的

1.数据传输:一个进程需要将它的数据发送给另一个进程
2.资源共享:多个进程之间共享同样的资源
3.通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。
4.进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

1.2 进程间通信发展

1.管道
2.System V进程间通信
3.POSIX进程间通信

1.3 进程间通信分类

1.3.1 管道

1.匿名管道pipe
2.命名管道

1.3.2 System V IPC

1.System V 消息队列
2.System V 共享队列
3.System V 信号量

1.3.3 POSIX IPC

1.消息队列
2.共享内存
3.信号量
4.互斥量
5.条件变量
6.读写锁

2.管道

2.1 什么是管道

1.管道是Unix中最古老的进程间通信的形式。
2.我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”
在这里插入图片描述

2.2 匿名管道

#include <unistd.h>
功能:创建一无名管道
原型
int pipe(int fd[2]);
参数
fd:文件描述符数组,其中fd[0]表示读端, fd[1]表示写端
返回值:成功返回0,失败返回错误代码

在这里插入图片描述
示例代码:

例子:从键盘读取数据,写入管道,读取管道,写到屏幕
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>int main( void )
{int fds[2];char buf[100];int len;if ( pipe(fds) == -1 )perror("make pipe"),exit(1);// read from stdinwhile ( fgets(buf, 100, stdin) ) {len = strlen(buf);// write into pipeif ( write(fds[1], buf, len) != len ) {perror("write to pipe");break;}memset(buf, 0x00, sizeof(buf));// read from pipeif ( (len=read(fds[0], buf, 100)) == -1 ) {perror("read from pipe");break;}// write to stdoutif ( write(1, buf, len) != len ) {perror("write to stdout");break;}}
}

2.3 用fork来共享管道原理

在这里插入图片描述

2.4 站在文件描述符角度 - 深度理解管道

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com