• unix c 09


    IPC - 进程间通信
      文件/信号/管道/共享内存/消息队列/信号量集/网络
      XSI IPC (共享内存、消息队列和信号量集)
      使用方式 非常的类似。

    共享内存的使用步骤:
        1 生成一个key(对外的授权),通过key可以进入XSI IPC内部。
            key(本质是一个数字)的生成有三种方式:
          1) IPC_PRIVATE 宏 做key,很少使用,因为私有就没法进行进程间通信。
          2) 定义一个头文件,在头文件中定义所有的key
          3) ftok()生成key,ftok需要提供两个参数,一个是 存在的任意路径,另一个是项目的编号(随便)
        2 创建/获取一个共享内存。
            shmget()可以创建/获取 一个共享内存。
        3 用虚拟内存地址 挂接(映射) 共享内存。
            shmat()挂接
        4 使用
        5 脱接(解除映射) 共享内存。
            shmdt() 脱接,不删除共享内存
        6 如果确定不需要,可以考虑删除。(根据需要)
            shmctl()可以查看、修改、删除。
            shmctl函数的用法:
            shmctl(int shmid,int cmd,struct shmid_ds*)
         cmd的情况:
         IPC_STAT - 查询,会把结果放入结构体
         IPC_SET - 修改,通过结构体修改(只有少数能改,包括权限、用户和组)
         IPC_RMID - 删除,第三个参数不需要

      几个命令:
         ipcs 可以查看XSI IPC结构
            -a 所有  -m 共享内存 -q 消息队列 -s 信号量集
         ipcrm 可以删除XSI IPC结构,需要指明ID
            -m ID   -q ID   -s ID 

    XSI IPC(消息队列、共享内存、信号量集)的共性:
       1 创建和获取都需要一个key,用ftok函数
       2 用xxxget() 获取/创建 一个结构,返回ID
       3 在创建时,多半使用0666|IPC_CREAT,IPC_EXCL可选,使用IPC_EXCL时,如果已经存在,会返回-1.
       4 对IPC结构都提供一个xxxctl函数,可以进行:
         IPC_STAT - 查询
         IPC_SET - 修改
         IPC_RMID -删除

      消息队列的使用步骤:(数据封装在消息中)
       1 ftok生成key
       2 使用msgget创建/获取消息队列,返回msgid
       3 发送/接收消息,函数是:msgsnd()/msgrcv()
       4 如果不需要,用msgctl()删除。
         msgsnd()和msgrcv()机制:
         消息可以定义类型,格式如下:
           struct mymsg{ //结构体的名字可以修改
               long mtype; //消息类型
               char buf[];//程序可以随意定义
           };
      在计算消息的大小时,可以去掉mtype占的空间。

      mtype是一个正数,代表消息的类型,在接收时使用
      在接收消息时,可以指定消息的接收类型:
      msgtyp - =0 接收 任意类型的消息中的第一个
                  - >0 接收 该类型的消息中的第一个
                  - <0 接收 小于等于该类型绝对值的一个
                  (从小到大)

      flags - 0 代表如果不满足发送接收,等待(阻塞)
              - IPC_NOWAIT 如果不满足,返回-1(非阻塞)
      注: 查看msg文档时,注意区分msg和msq

    信号量集(semphore arrays)

          IPC中,速度最快的是共享内存,最常用的是消息队列。因为共享内存 应对 多进程(超过2个进程)同时写时 会有错误。
          信号量 其实就是一个计数器,用于控制 同时访问数据的进程总数。信号量集 就是由 多个信号量组成的数组。
          IPC用key对应信号量集。
          信号量的工作方式:
           先设一个初始值(并行最大的进程数),然后每运行一个进程就减1,进程完成工作后,计数+1,到 0 就不允许再运行新的进程。
        
       关于信号量集的函数和步骤:
          1 生成key,函数ftok()
          2 创建信号量集,函数 semget()
          3 设置每个信号量的初值,函数 semctl()
          4 使用,需要用semop函数进行 值的改变(+1和-1)
          5 如果不再使用,可以 删除。

      网络
       IP地址 - 计算机在网络中的唯一标识(编号)。
       底层是一个整数(4字节)IPV4,此外有IPV6。
       IP地址表示方式有两种:
            第一种 十六进制(8位18进制)
            第二种 点分十进制 (0-255的4个整数,用.隔开)
        192.168.100.2(点分十进制) 人的习惯
        C0  A8  64 02(十六进制)  计算机的习惯
        有时候需要进行 表示方式的装换

       网址(域名) 是转换成ip以后才能定位计算机。
       域名解析服务器 就是 把 域名 解析成ip。
       IP地址和Mac地址(网卡地址)绑定在一起,Mac是每个网卡在出厂前设定的,保证唯一。
       计算机中 有多个进程在运行,端口号 负责 代表计算机中的一个进程。
       所以,网络编程 就是 IP和端口的开发。

  • 相关阅读:
    61个下拉菜单实例
    简单图片放大效果
    QQ,MSN,Skype在线客服代码
    codesmith自定义模板之实体层
    如何利用缓存提高ASP.NET网站速度
    10+Jquery Tooltip Plugins and Tutorial Collection
    10个ajax 上传插件
    ASP.NET 中 “返回上一页”,“上一步”的实现方法
    执行多条SQL语句,事务处理
    [Asp.Net+C#]Datagrid使用技巧四(怎样控制在一个单元格中放置多个操作按钮及删除数据)
  • 原文地址:https://www.cnblogs.com/elisha-blogs/p/3771172.html
Copyright © 2020-2023  润新知