Linux系统编程:IPC通信和网络通信

1.IPC通信

IPC 进程间通信方式:
  
  共享内存是最高效的进程间通信方式 
      
                        

共享内存:
  1.是一块,内核预留的空间 
  2.最高效的通信方式,避免了用户空间到内核空间的数据拷贝  

IPC通信方式 ---操作流程类似的 
操作:
(1)产生key值
#include <sys/types.h>
       #include <sys/ipc.h>

       key_t ftok(const char *pathname, int proj_id);
       功能:
             将pathname 和 proj_id 转换为 key值 
       参数:
        @pathname  //给一个路径名 
        @proj_id   //工程id       eg: 'A'

 如:key_t key = ftok("/",'A');
       返回值
          成功 key值
          失败 -1     

(2)通过key获取ipc对象 (共享内存)
        shmget   //shared memory 
1、申请对象:shmget()
    #include <sys/ipc.h>
    #include <sys/shm.h>
    ps aux|grep a.out
        shared memory get         IPC_CREAT|0666
    int shmget(key_t key, size_t size, int shmflg);
    功能:
         使用唯一键值key向内核提出共享内存使用申请
    参数:key   唯一键值
          size  要申请的共享内存大小
          shmflg 申请的共享内存访问权限,八进制表示
          如果是第一个申请,则用IPC_CREAT
          如果要检测是否存在,用IPC_EXCL
如:int shmid = shmget(key,1024,IPC_CREAT | 0666); 

   返回值:
            成功 返回共享内存id,一般用shmid表示
            失败  -1;

    

(3)共享内存 绑定 
        shmat 

    映射对象:shmat()
    void *shmat(int shmid, const void *shmaddr, int shmflg);
    功能:将指定shmid对应的共享内存映射到本地内存。
    参数:shmid 要映射的本地内存
          shmaddr 本地可用的地址,如果不确定则用NULL,表示
                  由系统自动分配。
          shmflg  
          0         ,  表示读写
          SHM_RDONLY, 只读
如:void*p = shmat(shmid,NULL,0); 

   返回值:
           成功 返回映射的地址,一般等于shmaddr
            失败 (void*)-1        

(4)解除绑定(映射)

    撤销映射:shmdt
    int shmdt(const void *shmaddr);
    功能:将本地内存与共享内存断开映射关系。
    参数:shmaddr 要断开的映射地址。
    返回值:成功  0
            失败  -1;

          

(5)销毁IPC对象 
        删除对象:shmctl
    int shmctl(int shmid, int cmd, struct shmid_ds *buf); //ctl = control 
    功能:
         修改共享内存属性,也可以删除指定的共享内存对象。
    参数:shmid 要删除的共享内存对象
          cmd 
               IPC_RMID 删除对象的宏
          buff  NULL 表示只删除对象。
如:shmdt(p);    

返回值:成功 0
            失败 -1

2.实现进程间通信同步

pause函数:pause();

在输入进程的循环中用kill(pid,SIGUSR1);

在接收进程中用signal(SIGUSR1,handler);

全局区定义空的handler,接收进程的接收循环中用pause();

3.网络通信

实现网络通信:
(1)物理层面 有一个 信息通路  
  有线,无线 ,5G,4G ,星链 
(2)软件层面(逻辑层面) 也需要 一个通路 

网络通信体系:

osi七层模型:


IP地址

        是网络中主机的唯一标识,它由网络地址和主机号组成。网络地址是子网的唯一标识,类似于电话号码的区号;主机号是子网内每台主机的编号。在现在(IPv4)的网络中,IP地址是32bit的二进制数,采用大端字节序:

表示方法(点分十进制)

直接使用二进制数,不容易记忆,为了方便记忆,将32位二进制码划分为4个字节,每个字节转化成相应的十进制数,字节之间用“.”来分隔,这种表示方法,称之为“点分十进制表示法”。

例:192     .168     .1        .1

    11000000 10101000 00000001 00000001

类型

范围

用途

A类

0.x.x.x---127.x.x.x.x

10.x.x.x

私网(局域网)地址

127.x.x.x

环回网络地址

其他

大型主干网地址

B类

128.x.x.x - 191.x.x.x

172.16.x.x - 172.31.x.x

私网(局域网)地址

169.254.x.x

表示没有找到DHCP服务器

其他

主干(城市)网地址

C类

192.x.x.x - 223.x.x.x

192.168.x.x

私网(局域网)地址

D类

组播地址

E类

保留

 

子网掩码

获取IP地址中的网络地址和主机地址:

TCP(即传输控制协议):是一种面向连接的传输层协议,它能提供高可靠性通信(即数
据无误、数据无丢失、数据无失序、数据无重复到达的通信)

* 适用情况:
1. 适合于对传输质量要求较高,以及传输大量数据
的通信。
2. 在需要可靠数据传输的场合,通常使用TCP协议
3. QQ等即时通讯软件的用户登录账户管理相关
的功能通常采用TCP协议

tcp协议特点:
1. 面向连接   //类似打电话通话之前 ,必须先打通 
2. 可靠传输   //保证数据准确可靠 (tcp协议机制 里面的功能 )
3. 面向字节流程

UDP(User Datagram Protocol)用户数据报协议,是不可靠的无连接的协议。
在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。

* 适用情况:
1. 发送小尺寸数据(如对DNS服务器进行IP地址查询时)
2. 在接收到数据,给出应答较困难的网络中使用UDP。(如:无
线网络)
3. 适合于广播/组播式通信中。
4. MSN/QQ/Skype等即时通讯软件的点对点文本通讯以及音视频通
讯通常采用UDP协议
5. 流媒体、VOD、VoIP、IPTV等网络多媒体服务中通常采用UDP
方式进行实时数据传输

UDP特点:    //广播 
1.不可靠 
2.无连接 
3.数据报  

          

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值