标签:装系统 很多 没有 内存 情况下 win 信号量 需求 color
本机进程间通信 与 网络通信
本机进程间通信
实现本机内部的进程间的通信,通信时需要使用专门IPC机制,比如信号、管道(无名、有名)、system V IPC,(消息队列、共享内存、进程信号量)。这些参考前面文章
网络通信
网络通信也被称为网络IPC,直译就是网络进程间通信,简称网络通信,说白了就是跨机进程间的通信。在网络通信没有出现之前,那个时候只有“本机进程间通信”,直到后来人们发现两台不同计算机的进程间也有通信的需求,此时才发明了网络通信,以实现“跨机进程间通信”。所以可以简单的认为,网络通信其实就是“本机进程间通信”向“跨机进程间通信”扩展后的产物,只是这个扩展并不是那么容易的,为了实现跨机通信最起码:
①通信协议的实现
协议很早以前就已经被定义好了,至于协议栈的代码实现,Linux等系统也早已实现好,只要使相应的网络API调用即可。多数情况下协议栈代码属于OS的一部分,但是如果裸机需要网络通信时,裸机没有运行OS,此时只能运行独立的协议栈代码。
②各种通信设备的支持
网卡:笔记本、台式机里面都有
路由器:各种家用路由器,企业路由器
光纤、电缆、基站等:由电信、移动、联通等网络运行商提供
网络编程API 与 系统API
网络的协议栈代码属于Linux OS的一部分,所以网络编程的API其实也是Linux所提供的系统API之一,只不过是专门被用于网络通信,所以我们单独的称为网络编程接口(API),与之前文章里面将IPC时候的API没有什么区别,都是系统提供的系统API。
网络编程的接口
第一种:系统API
第二种:库API,通过封装系统API实现
当然库在封装系统提供的网络API时,往往可能还会进一步简化,就是把系统API很多步骤的函数,封装为一个函数,调用库接口往往更简洁,不过总体上你会发现其实实现方式都是一样的。
典型语言实现网络通信
C程序实现网络通信
(a)直接调用系统提供网络API
比如直接调用Linux或者windows的系统API。
(b)直接调用C库的网络API
不过这里说的C库并不是标准C库(因为标准C库并不提供网络编程的接口),而是一些特定c库,这些c库会提供网络编程接口。
Linux嵌入式c程序想要通信的话,既可以调用C库提供的网络API,也可以直接Linux系统的网络API,不过在嵌入式开发里面,为了节省计算机的资源,往往会尽量避免运行额外的库,所以此时会直接调用Linux的网络API来实现。
C++、java等程序实现网络通信
基本都是直接调用它们的库接口来实现的,特别是java程序,java程序里面不能直接写C接口,所以必须使用java自己网络编程库接口。
不过C++还好,因为c++兼容c,所以c++程序有三种选择
(a)使用c++自己“类库”提供的网络API
(b)使用某c库提供的网络API
(c)直接使用Linux OS提供的网络API
c++程序一般使用的都是“类库”的网络API。
TCP/IP协议栈
层次结构图
标签:装系统 很多 没有 内存 情况下 win 信号量 需求 color
原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/9457212.html