• 共享内存、网络(day13)


    一、共享内存
    1、获取一个键值   ftok(3)
    2、使用键值获取共享内存的id   shmget(2)
    #include <sys/ipc.h>
    #include <sys/shm.h>
    int shmget(key_t key, size_t size, int shmflg);
    功能:分配一块共享内存段。获取和key值相关的共享内存段的id。
    参数:
    key:ftok(3)的返回值
    size:指定了共享内存段的尺寸
    shmflg:
    IPC_CREAT:如果没有和key值相关的内存段,创建
    IPC_EXCL:
    mode: 指定共享内存段的权限
    返回值:
    成功返回共享内存段的id
    失败 -1   errno被设置
    
    编写代码创建一块共享内存段,获取该内存段的id
    代码参见   shmget.c
    
    3、将共享内存关联到进程的虚拟地址空间   shmat(2)
    #include <sys/types.h>
    #include <sys/shm.h>
    void *shmat(int shmid, const void *shmaddr, int shmflg);
    功能:将一块共享内存段添加到进程的地址空间
    参数:
    shmid:指定了共享内存段的id
    shmaddr:NULL  有系统选择地址
    shmflg:
    SHM_RDONLY:共享内存段  只读
    0
    返回值:
    返回共享内存段附加到进程的地址
    错误  (void *) -1   errno被设置
    
    
    4、向内存读写数据
    5、解除进程的虚拟地址到共享内存的关联  shmdt(2)
    int shmdt(const void *shmaddr);
    功能:解除共享内存段和进程地址空间的关联
    参数:
    shmaddr:指定了共享内存段的起始地址
    返回值:
    成功  0
    -1  错误  errno被设置
    
    举例说明   使用共享内存段实现进程间的通讯 
    代码参见   shmA.c  shmB.c
    
    二、网络的基础知识
    
    协议就是规则。
    物理层协议    定义了电气规则
    网帧   定义了网络传输的基本单位     链路层协议
    (以太网、令牌环网)
    在一个局域网里只允许出现一种网帧。
    
    网络通讯中采用TCP/IP协议家族
    TCP/IP 协议分为4层或者5层
    物理层、链路层   网络层、传输层、应用层
    链路层   网络层、传输层、应用层
    
    ip 地址  192.168.1.12    逻辑地址   4G   40亿 
    MAC地址  网卡的物理地址  6个字节    4G *64K
    每块网卡都有自己的一个身份证。
    如和查看本地的ip地址和mac地址
    sudo ifconfig
      
    windows 下 ipconfig /all
    
    要实现通许,需要知道对方的ip地址和端口号
    网络设备
    集线器   hub   就是对电气的放大和分流   物理层 1层交换
    交换机   交换的是网帧     链路层    2层交换
    路由器   交换的是ip报文   网络层    3层交换
    
    ip地址的分类
    既然要做网络通讯,就必须知道ip地址的构成
    ip地址是由网络号和主机号组成
    那么我们就需要知道ip地址的主机号  网络号
    如何获取一个ip地址的网络号?
    需要使用子网掩码
    192.168.1.130/25
    
    192.168.1.130
    255.255.255.128
    192.168.1.128     网络号
    127-2   125
    
    192.168.1.125/25
    
    192.168.1.125
    255.255.255.128
    192.168.1.0
    
    
    192.168.1.125/24
    192.168.1.130/24
    
    局域网内数据的传送过程
    如何查看本机的路由表?
    sudo route -v
    
    如何查看arp表?
    sudo arp -a
    
    如何知道两台机器是否互通?
    ping 目标ip地址
    172.30.3.93
    
    总结:
    一、system v IPC
    共享内存
    二、网络基础
    子网掩码
    三次握手
    TCP/IP协议分层
  • 相关阅读:
    三范式
    解决Linux下乱码
    ER概念模型
    20140607
    PHP Fatal error: Class 'Yaf_Application' not found
    PHP流式读取XML文件
    php反射的使用
    wget 和curl 进行post数据
    crontab
    Leetcode OJ: Gray Code
  • 原文地址:https://www.cnblogs.com/Kernel001/p/7732638.html
Copyright © 2020-2023  润新知