命名管道聊天思路|学习笔记

简介: 快速学习命名管道聊天思路

开发者学堂课程【物联网开发- Linux 高级程序设计全套视频命名管道聊天思路】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/660/detail/11042


命名管道聊天思路

 

题目:实现单机聊天程序

使用多进程实现多任务,通过命名管道实现进程间通信,实现聊天程序

演示效果image.gif

提示:

peter可以连续发 lucy可以连续收 收到后打印对方的名字,对方的消息,每个人有两个进程,两个任务,一个进程负责收消息,收到后打印对方的名字,对方的消息,另外一个任务负责从键盘获取字符串给对方发消息。

原理:

image.gif

image.gifLucy 有个进程专门发消息,通过 L_P 管道,peter 有个进程专门负责收。

Peter 有个进程专门发消息,Lucy 有个进程专门负责收。两根命名管道。

过程:

无论 peter 还是 lucy 框架过程都是这样,首先创建两个管道接下来打开管道,创建管道,打开管道,创建进程,在子进程打印提示符,从键盘获取字符串,向管道里写数据,read 消息,如果是 lucy 从 peter  to  lucy 去读,读到后打印对方的名字对方的消息,再将自己的名字打印出来, 因为覆盖了。

收到消息后打印注意

Printf(“\rpeter:%s\n”,recv_buf);

Printf(“lucy:”);

Fflush(stdout);

image.gif如果是 lucy

Lucy:

Fd_w=open(“lucy_to_peter”,O_WRONLY);

Fd_r=open(“peter_to_lucy”,O_WRONLY);

如果是peter

Peter:

Fd_w=open(“peter_to_lucy”,O_WRONLY);

Fd_r=open(“lucy_to_peter”,O_WRONLY);

他们都堵塞第一个 open,都等待对方以只读方式打开管道,peter 第一个 open 在等lucy第二个 open,形成死锁。

image.gif

’将两个调换位置,一个以只写一个以只读,两个进程,以不同方式打开同一管道,同样方式打开第二个管道,防止死锁,打开命名管道注意顺序

Peter:

Fd_r=open(“lucy_to_peter”,O_WRONLY);

Fd_w=open(“peter_to_lucy”,O_WRONLY);

父进程创建子进程,实现多任务。

父进程负责发信息(向 FIFO 里写数据),子进程负责接收信息(从 FIFO 里读数据)打开命名管道的用阻塞的方法打开。

 

相关文章
|
Rust 安全 编译器
Rust中的Raw Pointers与不安全代码:深入探索与最佳实践
本文旨在探讨Rust编程语言中Raw Pointers(原始指针)的使用场景以及如何安全地编写不安全代码。我们将深入了解Raw Pointers的定义、工作原理以及它们在Rust中的用途,同时还将讨论编写不安全代码的最佳实践和注意事项,以确保代码的稳定性和安全性。
|
11月前
|
SQL 安全 数据库连接
除了使用Django的ORM,还能通过什么方式在Django中避免SQL注入漏洞?
除了使用Django的ORM,还能通过什么方式在Django中避免SQL注入漏洞?
296 73
|
缓存 监控 算法
HyperLogLog有哪些应用场景呢
【10月更文挑战第19天】HyperLogLog有哪些应用场景呢
通义灵码写童年小游戏挑战赛
通义灵码版本升级啦,支持多种上下文组合,包括 #image 、#file、#codeChanges、#gitCommit 等,立即体验。
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
474 0
|
存储 消息中间件 运维
使用Java实现分布式日志系统
使用Java实现分布式日志系统
获取文件绝对路径的几种方法比较
获取文件绝对路径的几种方法比较
|
JavaScript
vue路由导航守卫(全局守卫、路由独享守卫、组件内守卫)
vue路由导航守卫(全局守卫、路由独享守卫、组件内守卫)
683 0
|
弹性计算 监控 调度
带你读《弹性计算技术指导及场景应用》——2. vGPU资源利用率的提升、监控与告警的实现
带你读《弹性计算技术指导及场景应用》——2. vGPU资源利用率的提升、监控与告警的实现
407 2