精华内容
下载资源
问答
  • 常见几种通信方式整理

    千次阅读 2017-01-06 09:16:18
    常见几种通信方式整理 http wifi wifi介绍 蓝牙 串口 gpio 红外线 socket nfc

    常见的几种通信方式整理

    1. http
    2. wifi
      wifi介绍
    3. 蓝牙
    4. 串口
    5. gpio
    6. 红外线
    7. socket
    8. nfc
    展开全文
  • 常见进程间的几种通信方式以及使用注意点 通常情况下进程间的通信方式主要以下几点: 此处只是介绍相关工作过程及概念,具体代码,网上一抓一大片,可以自己看。 1、管道: 管道通常分类两种,一种有名管道,一...

    常见进程间的几种通信方式以及使用注意点

    通常情况下进程间的通信方式主要有以下几点:

    此处只是介绍相关工作过程及概念,具体代码,网上一抓一大片,可以自己看。

    1、管道:

    管道通常分类两种,一种有名管道,一种无名管道无名管道:主要用于父子进程间的通信方式,主要的数据方式是一般是通过一个二维数组来进行通信,比如int pipefd[2],pipefd[0]主要是用来读数据,pipefd[1]主要是用来写数据。有名管道:也叫命名管道,这个主要是应用于非父子进程之间的一种数据通信方式,通常管道的使用过程总共分为三步:第一,创建管道,需要指定管道文件,第二步,打开管道文件,通常会有两种常见方式,以阻塞的方式打开或者非阻塞的方式开,第三步,就是管道的写,也会两种常见方式,以阻塞的方式写或者非阻塞的方式写,其中阻塞的读写指的是在读或者写的时候必须有一个个进程在写或者读操作。管道主要是进程间数据同步的一种方式,比如一个写数据,另一个读数据。

    2、信号量

    信号量也是常见的进程直接的一种数据共享方式,信号量的操作通常也是分为了三步,第一步创建信号量semget,这里面主要是需要确定key,第二步是初始化信号量semctl其中需要注意的就是第二个参数,一般使用0,表示这个一个唯一的信号量,第二个参数semun,一般采用默认值,这个联合结构体一般会在sem.h头文件中进行定义,可以直接使用即可,有关信号量的操作主要是第三步,就是信号量的操作了semop,这个里面主要是使用了

    struct sembuf
    { 
        short sem_num;
        short sem_op;
        short sem_flg;
    }

    第一个参数,表示信号量编号,除非你使用一组信号量,一般使用0;第二个参数是信号量值的改变操作即P(+1)和V(-1)操作,第三个参数一般是SEM_UNDO,使得系统跟踪当前这个信号量使用情况,如果在当前进程结束情况下,这个信号量没有进行释放,则由系统自动释放该进程持有的这个信号量。信号量主要是进程间对于临界区代码权限访问控制的一种方式,确保了唯一访问以及操作性。

    3、消息队列

    消息队列在使用上与管道有很多相似的地方,但是比管道使用起来方便了很多,减少了管道的打开和关闭的操作,但是消息队列仍然没有解决在使用管道时遇见的管道满时的阻塞问题,消息队列与管道不同之处在于它独立于发送和接受进程,管道的阻塞模式则需要依赖于进程的发送和接收。消息队列使用的方式一般也是分为三步:

    • 第一步:创建消息队列msgget
    • 第二步:发送消息,即把消息添加到消息队列中去使用msgsnd(int msgid,const void *msg_pstr, size_t msg_sz, int msgflg)函数,主要参数需要注意的是第二个参数msg_pstr指针,这个消息指针的第一个参数必须是以一个长整型的成员变量开始,最后一个msgflg标示,主要是控制在消息队列满或者消息队列达到系统范围的限制时将要发生的事情,如果是IPC_NOWAIT,则函数立即返回,不发送消息,且返回值为-1,如果该标志位被清除,则发送进程将挂起,等待消息队列腾出空间。
    • 第三步:就是消息接受函数msgrcv(int msgid, void *msg_pstr, size_t msg_sz, long int msgtype, int msgflg) ,msg_pstr跟上面的一样,主要是msgtype标示接受消息的优先级,如果为0标示接受队列中第一个可用的消息,如果大于零,获取具有相同消息类型的第一个消息,msgflg用于控制队列中没有相应类型消息时候的操作,如果是IPC_NOWAIT则函数立即返回并且返回-1,如果IPC_NOWAIT被清除,则进程会挂起一直等待一小相应的类型消息出现为止。

    4、共享内存

    共享内存是在进程这几个通信方式中速度以及效率最高的一种方式,使用操作一般也分为三部分,第一步:创建共享内存,主要是设置共享内存的key以及大小,第二步绑定共享内存到指定内存地址,一般默认使用系统自己选择的地址,第三步:有两种操作方式1、shmdt将共享内存从当前进程剥离掉,但是未删除它,2、shmctl可以删除共享内存,直接物理删除该内存段。

    进程间数据同步方式一般使用的都是共享内存,主要原因就是因为高效,但是共享内存在使用的时候有一个问题就是它无法确保数据的唯一性,没有提供数据同步的机制,通常情况下结合信号量或者互斥锁来进行数据的同步,比如使用互斥锁的时候,数据内容的定义如下:

    struct sm_msg  
    {  
        int flag;  
        pthread_mutex_t    sm_mutex;  
        char buf[SM_BUF_SIZE];  
    }; 

    在使用之前需要先解释一下互斥锁的使用情况。

    经常使用的互斥锁是线程内的互斥锁,比如这种使用方式
    初始化锁: int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutex_attr_t *mutexattr);
    加锁:int pthread_mutex_lock(pthread_mutex *mutex);
    解锁:int pthread_mutex_unlock(pthread_mutex *mutex);
    销毁锁: int pthread_mutex_destroy(pthread_mutex *mutex);
    对于mutexattr参数默认都会使用NULL,表示使用互斥锁的默认属性,表示为快速互斥锁,单互斥锁还有一种是进程互斥锁。

    简单在此介绍下进程互斥锁的使用

    pthread_mutex_attr_t *mutexattr;
    初始化互斥锁pthread_mutexattr_init(&mattr),
    属性的缺省值为 PTHREAD_PROCESS_PRIVATE。 该值表示可以在进程内使用经过初始化的互斥锁。mattr 范围可能的值为

    • PTHREAD_PROCESS_PRIVATE
    • PTHREAD_PROCESS_SHARED。

    PTHREAD_PROCESS_PRIVATE 是缺省值。PTHREAD_PROCESS_PRIVATE表示由同一进程所创建的线程才能使用,要在多个进程中的线程之间共享互斥锁,可以在共享内存中创建互斥锁,并将pshared属性设置为 PTHREAD_PROCESS_SHARED,
    通常使用pthread_mutexattr_setpshared来设置属性
    pthread_mutexattr_setpshared(pthread_mutexattr_t *mattr, int pshared);

    大致介绍完线程互斥锁,接下来说下如何使用该互斥锁;

    使用的过程大致跟线程互斥锁使用方式一致,需要注意的是在调用pthread_mutex_init()的时候,需要使用pthread_mutex_init(sm_msg->sm_mutex, mutexatrr)的方式来初始化互斥锁,这样就可确保在进程中的数据的互斥性。

    还有一种共享内存的同步方式就是使用信号量,具体使用过程如下介绍:

    key_t semkey;
    key_t shmkey;
    //创建共享内存
    shmid=shmget(shmkey,1024,0666|IPC_CREAT);
    //创建信号量
    semid=semget(semkey,1,0666|IPC_CREAT);
    union semun{
    int val;
    struct semid_ds *buf;
    unsignedshort*array;
    }sem_u;
    sem_u.val=1;/*设置变量值*/
    semctl(semid,0,SETVAL,sem_u);//初始化信号量,设置第0个信号量
    对于信号量P操作
    共享内存操作
    对于信号量V操作

    以上就是有关进程间通信的常见的四种方式的概括,当然还有套接字的使用,下次再补充

    多线程操作总结:http://blog.csdn.net/bingshiwuyu/article/details/78768515

    展开全文
  • 嵌入式中常见几种通讯方式

    千次阅读 2020-07-01 21:05:22
    盘点一下:常见几种通讯方式 (一) UART-通用异步串行数据总线 ➢201kbps-10Mbps 应用于低速通讯,对应电平标准RS232/RS422/RS485. 如电脑中口,工控机串口,芯片调试接口等。 ➢优缺点: 简单,速度慢 另外科普...

    盘点一下:常见的几种通讯方式

    (一) UART-通用异步串行数据总线

    ➢201kbps-10Mbps 应用于低速通讯,对应电平标准有RS232/RS422/RS485. 如电脑中口,工控机串口,芯片调试接口等。
    ➢优缺点: 简单,速度慢
    在这里插入图片描述
    另外科普::我们用数据线把程序下载到单片机中,通常是通过RS232,有时候也会想RS232到底是啥?RS485也经常听说,一起来看看吧👇在这里插入图片描述
    RS-232、RS-422与RS-485都是串行数据接口标准,最初都是由电子工业协会(EIA)制订并发布的,RS-232在1962年发布,命名为EIA-232-E,作为工业标准,以保证不同厂家产品之间的兼容。RS-422由RS-232发展而来,它是为弥补RS-232之不足而提出的。为改进RS-232通信距离短、速率低的缺点,RS-422定义了一种平衡通信接口,将传输速率提高到10Mb/s,传输距离延长到4000英尺(速率低于100kb/s时),并允许在一条平衡总线上连接最多10个接收器。RS-422是一种单机发送、多机接收的单向、平衡传输规范,被命名为TIA/EIA-422-A标准。为扩展应用范围,EIA又于1983年在RS-422基础上制定了RS-485标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围,后命名为TIA/EIA-485-A标准。由于EIA提出的建议标准都是以“RS”作为前缀,所以在通讯工业领域,仍然习惯将上述标准以RS作前缀称(来源于网友:求兴有昝云)

    (二)IIC (Inter-Integrated Circuit) --同步串行总线
    ➢100Kbps-3. 4Mbps,应用于多外围设备的低速通讯,类似温度传感器等。
    ➢优缺点:连线简单,多主设备,通过发地址选择器件。
    ➢它是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据,在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送。I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。
    ➢这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。
    我认为IIC是很实用的。
    在这里插入图片描述
    (三) CAN—控制器局城网络
    ➢<1Mb/S (与距离有关,10Km 时5Kb)。CAN(Controller Area Network)为多主结构,用于动力控制模块,刹车模块,安全模块等汽车,船舶等工业领域。
    现场总线(Field bus):用于工业现场仪器仪表、控制器等数字通信。双向,多节点数字通讯。

    ➢优缺点:串行半双工接口,具有优先级,错误处理,故障隔离等功能。分布式、开放、互联、高可靠性。在这里插入图片描述
    (四) 8080/6800 -intel 总线/moto总线

    ➢并行接口,常用于MCU,小尺寸液晶显示屏等。
    ➢优缺点: 位宽,带宽相对较高,信号引脚多
    ➢8080: intel MCS-51单片机,读使能(RD)和写使能(WR)控制读写。
    ➢6800: Motorola 的68系列单片机,总使能(E)和读写选择(R/W)控制读写。

    比如液晶1602里面就用了8050
    在这里插入图片描述
    (五) SPI(Serial Peripheral Interface)(注意不是api,要区别开来,差异很大)
    ➢SPI接口应用在EEPROM、FLASH、实时时钟、AD转换器等器件之间的通信等

    ➢优缺点:SPI支持高速、同步、全双工、非差分、总线式通信,没有指定的流控制,没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据可靠性上有一定的缺陷。在这里插入图片描述
    SPI 接口一般使用 4 条线通信:
    MISO 主设备数据输入,从设备数据输出。
    MOSI 主设备数据输出,从设备数据输入。
    SCLK 时钟信号,由主设备产生。
    CS 从设备片选信号,由主设备控制。

    以上内容就是对这些常听说的通信方式的一个概述,让小白对这些有一些大致的印象,要想深入请百度👀

    展开全文
  • 理解几种常见的进程间通信方式

    千次阅读 2015-10-08 11:32:40
    什么是进程间通信广义上讲,进程间通信(Inter-Process Communication, IPC)是指运行在不同进程(不论是否在同一台机器)中的若干线程间的数据交换。从上面的定义可以得出两点: 参与通信的进程即可以运行在同一台机器...

    什么是进程间通信

    广义上讲,进程间通信(Inter-Process Communication, IPC)是指运行在不同进程(不论是否在同一台机器)中的若干线程间的数据交换。

    从上面的定义可以得出两点:

    • 参与通信的进程即可以运行在同一台机器上,也可以运行在各自的设备环境中(Remote Procedure Call Protocol, RPC)。如果进程是跨机器运行的,则通常是由网络连接在一起。
    • 实现方式可以有多种多样。原则上,任何跨进程的数据交换都可以称为进程间通信。

    常见的几种进程间通信方式

    共享内存(Shared Memory)

    共享内存是一种常见的进程间通信机制。由于两个进程可以直接访问同一块儿内存区域,减少了数据的复制操作,因而在速度上的优势比较明显。

    一般情况下,实现内存共享的步骤如下:

    1. 创建内存共享区

      内存共享区存在于内核中

    2. 映射内存共享区

      需要将内存共享区映射到进程的空间中才可以进一步操作

    3. 访问内存共享区

    4. 进程间通信

      由于内存共享本身并没有提供同步机制,所遇参与通信的各个进程需要自己协商处理。

    5. 撤销内存映射区

    6. 删除内存共享区

    管道(Pipe)

    管道这个词很形象地描述了通信双方的行为:

    • 分别处于管道的两方,进行数据传输通信。
    • 管道是单向的,如果一个进程既要读又要写,需要建立两根管道。类似于水管的特性。
    • 管道的两端分别为”读取端”(read end)和”写入端”(write end)。

    管道的局限性

    • 生命周期是随进程结束而完结
    • 只能用于具有亲缘关系的进程通信
    • 管道是匿名的,没有名字

    为了克服管道上述的局限性,可以使用命名管道(Named Pipe)。它具有管道所有的功能,并且没有管道的上述局限。

    套接字(Socket)

    其实网络通信中所使用的API与跨进程使用的是完全一样的。

    两种角色:服务器与客户端。
    每种角色的大致流程如下:

    服务器:

    • Create socket - socket()
    • Bind sockaddr - bind()
    • Listen - listen()
    • Wait & Accept
      • 一般在一个循环里边监听是否有新的连接 - accept();然后可以读写了
      • 读 - recv()
      • 写 - send()
      • 关闭连接与客户端的连接 - close()
    • 释放socket close()

    客户端:

    • Create socket - socket()
    • Bind sockaddr - bind()
    • 连接服务器 - accept();然后可以读写了
    • 读 recv()
    • 写 send()
    • 关闭连接 close()

    注意,如果服务器与客户端在同一台主机上,则是跨进程通信。如果在不同的主机上,则变成了网络通信。

    消息队列(Message Queue)

    信号(Signal)

    信号量(Semophore)

    参考

    1. Java进程通信
    2. Linux进程间通信方式–本地socket
    3. 进程间通信——socket
    展开全文
  • 几种常见进程间通信(IPC)方式-共享存储 前言 进程间通信是指在不同进程之间传播或...常见通信方式有以下几种: 管道pipe 有名管道FIFO 消息队列MessageQueue 共享存储 信号量Semaphore 信号Signal 套接字Socket...
  • 几种常见进程间通信(IPC)方式-管道pipe 前言 进程间通信是指在不同进程之间传播或...常见通信方式有以下几种: 管道pipe 有名管道FIFO 消息队列MessageQueue 共享存储 信号量Semaphore 信号Signal 套接字Sock...
  • 几种常见进程间通信(IPC)方式-信号 前言 进程间通信是指在不同进程之间传播或...常见通信方式有以下几种: 管道pipe 有名管道FIFO 消息队列MessageQueue 共享存储 信号量Semaphore 信号Signal 套接字Socket ...
  • Vue的通信方式,也可以说是传参方式。主要分为四: 父子传参 子父传参 相邻兄弟传参(亲兄弟) 远兄弟传参(表兄弟) 一、父子传参 原理:父控制子,通过子组件的props属性,抛出子组件自定义标签属性,...
  • 上一个星期看刚哥的书,主要进行了Android中IPC机制的学习,具体的实现方式...下面几种方法却可以实现数据交互。 介绍之前必要了解一下IPC和RPC的区别:RPC强调的是调用、即一个进程直接调用另外一个进程中的方法,
  • 前后端常见几种鉴权方式

    万次阅读 多人点赞 2018-01-03 15:53:31
    常见的授权四授权方式HTTP Basic Authentication,session-cookie,token(jwt),OAuth(开放授权)
  • 线程间通信几种实现方式

    万次阅读 多人点赞 2019-01-13 07:43:41
    线程间通信几种实现方式 首先,要短信线程间通信的模型两种:共享内存和消息传递,以下方式都是基本这两种模型来实现的。我们来基本一道面试常见的题目来分析: 题目:两个线程A、B,A线程向一个集合...
  • 物联网基础知识介绍一、物联网定义二、物联网的特征三、常用的无线通信方式比较四、常用的无线通信应用开发五、物联网体系结构 一、物联网定义 物联网(Internet of Things)指的是将无处不在(Ubiquitous)的末端设备...
  • java实现线程通信几种方式

    千次阅读 2020-05-30 19:34:35
    比如大家熟知的消息中间件的实现,从某种角度上讲,就借助了多线程通信的思想,下面总结了JDK中常用的几种实现线程通信方式,提供参考 1、synchronized实现方式 可能很多小伙伴们会疑问,synchronized是对共享...
  • <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" dir="ltr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> ...script type="text/javascript">...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 220,808
精华内容 88,323
关键字:

常见的通讯方式有几种