0822-0823 管道通信

1 .  mkfifo    ( read  write  ,open)   利用mkfifo 建立 管道 ,利用 open()协定管道两边的 读写人员

      

     open()管道时 ,open是阻塞的,只有当read ,write 遇到时再继续进行,open管道的顺序涉及死锁;

 

     fd_read=open(argv[1] ,O_RDONLY )    fd_write=open( argv[1] ,O_WRONLY )   分别分配给2个进程

     一根管道是单向的

 

 

2.  select  ( )    使用 select 时 是非阻塞的  利用了 bit_map方面思想   select 很重要!!!!

 

3 .   客户端 服务器 传输信息   select  mkfifo sscanf  sprintf  continue 

        (1) 先由服务器 创建一条管道, 这条管道用于 服务器 得到 客户端的信息,服务器读,客户端写,这条管道一个服务器读,可多个客户端写;  (这里  定义为  主管道  ,方便下面理解)   ,客户端通过主管道,将上线,下线,传递信息等 发送给服务器,由服务器再转发。主管道主要为服务器接收消息。

        (2) 进入一个新客户端 时,新的客户端通过主管道 向服务器 发送建立信息(建立 此客户端和服务器管道,这里可通过进程ID 唯一,利用 pid.fifo 命名管道名字),客户端建立 mkfifo ->  pid.fifo  , 客户端将pid传给 服务器,服务器方也建立与 pid.fifo 管道间的联系, pid.fifo管道 服务器写,客户端收。服务器通过pid.fifo 转发 信息。

        (3)  消息方面   上线: 客户端( on+pid ) 发送给 服务器 ,strncmp  服务器 对比 “on” 相同则知道是上线消息, open() 管道 pid.fifo , 

                    下线   客户端(off +pid ) 服务器关闭 相连的管道 ,客户端 unlink 删除 pid.fifo管道

                    发送消息  遍历  客户端结构体数组, 给在的客户端 转发 消息 write  read

       

        (4)  当 read() -》读主管道        返回0时表示当前没有 客户端连线  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值