进程间通信

很全的linux网络编程技巧

我只是一个虾纸丫 提交于 2020-03-17 03:51:39
1. LINUX 网络编程基础知识 1 1.1. TCP/IP 协议概述 1 1.2. OSI 参考模型及 TCP/IP 参考模型 1 1.3. TCP 协议 3 1.4. UDP 协议 5 1.5. 协议的选择 6 2. 网络相关概念 6 2.1. socket 概念 7 2.2. socket 类型 8 2.3. socket 信息数据结构 8 2.4. 数据存储优先顺序的转换 8 2.5. 地址格式转化 9 2.6. 名字地址转化 10 3. socket 编程 13 3.1. 使用 TCP 协议的流程图 13 3.2. 使用 UDP 协议的流程图 24 3.3. 设置套接口的选项 setsockopt 的用法 31 3.4. 单播、广播、组播(多播) 32 1. LINUX 网络编程基础知识 1.1. TCP/IP 协议概述 协议 protocol:通信双方必须遵循的规矩 由iso规定 rpc文档 osi参考模型:(应-表-会-传-网-数-物) è 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 tcp/ip模型4层: 应用层 {http超文本传输协议 ftp文件传输协议 telnet远程登录 ssh安全外壳协议 stmp简单邮件发送 pop3收邮件} 传输层 {tcp传输控制协议,udp用户数据包协议} 网络层 {ip网际互联协议 icmp网络控制消息协议

操作系统——进程

雨燕双飞 提交于 2020-03-17 03:12:59
什么是作业、进程、线程、管程? 作业:用户在一次解题或一个事务处理过程中要求计算机系统所做工作的集合。它包括用户程序、所需要的数据及控制命令等。作业由一系列有序的步骤组成。 进程:一个程序在一个数据集合上的一次运行过程。所以一个程序在不同数据集合上运行,乃至一个程序在同样数据及上上的多次运行都是不同的进程。 线程:线程是一个进程的实体,是被系统独立调度和执行的基本单位。 管程:实际上是定义一个数据结构在该数据结构上的能为并发进程所执行的一组操作,这组操作能同步进程和改变管程中的数据。 进程间通信是如何实现的? 进程间通信的方式有信号、信号量、消息队列、共享内存。 进程通信 是指不同进程之间的一些“接触”。 信号和信号量是不同的 ,他们都可以用来实现同步和互斥,但信号是使用信号处理器来进行的,信号量是使用P\V操作来实现的。消息队列是比较高级的一种进程间通信方法,他真的可以在进程间传送message,连传送一个“i seek you”都可以。 一个消息队列是可以被多个进程所共享;如果一个进程的消息太多,一个消息队列放不下,也可以用多于一个的消息队列(管理会比较复杂)。共享消息队列的进程所发送的消息除了message本身外还有一个标志,这个标志可以指明该消息将由哪个进程或哪类进程所接受。 每一个共享消息队列的进程针对这个队列也有自己的标志,可以用来表明自己的身份。

Linux 多线程通信

帅比萌擦擦* 提交于 2020-03-16 06:44:37
Linux 多线程通信 2008-03-13 11:01 19764人阅读 评论 (0) 收藏 举报 linux 多线程 thread join windows 编程 摘自资料(linux 与Windows不同) 线程间无需特别的手段进行通信,因为线程间可以共享数据结构,也就是一个全局变量可以被两个线程同时使用。不过要注意的是线程间需要做好同步,一般用mutex。可以参考一些比较新的UNIX/Linux编程的书,都会提到Posix线程编程,比如《UNIX环境高级编程(第二版)》、《UNIX系统编程》等等。 linux的消息属于IPC,也就是进程间通信,线程用不上。 linux用pthread_kill对线程发信号。 另:windows下不是用post..(你是说PostMessage吗?)进行线程通信的吧? windows用PostThreadMessage进行线程间通信,但实际上极少用这种方法。还是利用同步多一些 LINUX下的同步和Windows原理都是一样的。不过Linux下的singal中断也很好用。 用好信号量,共享资源就可以了。 使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式。我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式

Android四大组件之ContentProvider

非 Y 不嫁゛ 提交于 2020-03-15 22:20:31
ContentProvider作为四大组件之一,主要作用是进程间进行数据交互和共享(跨进程通信) ContentProvider相当于中间者角色(搬运工),真正存储和操作数据的数据源还是原来存储数据的方式(数据库、文件、xml或网络) 使用ContentProvider需要知道以下内容: 一、URI(统一资源标识符) (1)、唯一标识ContentProvider中的数据,外界进程通过URI找到对应的ContentProvider中的数据,再进行数据操作;,URI分为系统预置和自定义,分别对应系统内置的数据(如短信、通讯录等)和自定义数据库; Uri uri = new Uri.parse("content://com.test.myprovider/User/1"); //URI指向的资源是:名为`com.test.myprovider`的`ContentProvider`中表名为`User`中的`id`为1的数据 URI模式存在匹配通配符 * 和 #, content://com.test.myprovider/* //匹配任意长度的任何有效的字符串 content://com.test.myprovider/User/# //匹配provider中User表中的所有行 (2)、MIME数据类型 指定某个扩展名的文件用某种应用程序打开,如指定.html文件用text应用程序打开

作业3:构造一个简单的Linux系统MenuOS 20135115臧文君

余生长醉 提交于 2020-03-15 12:02:25
构造一个简单的Linux系统MenuOS 注:作者:臧文君,原创作品转载请注明出处,《 Linux 内核分析》 MOOC 课程 http://mooc.study.163.com/course/USTC-1000029000 一、Linux内核源代码介绍 1、根目录 arch/x86目录下的代码是我们重点关注的,arch中包括支持不同CPU的源代码。 init目录下包含内核启动相关的代码,如main.c(start_kernel函数相当于普通C程序的main函数,是Linux内核初始化的起点)。 ipc:进程间通信 kernel:Linux内核的核心代码 关注readme文件 二、构造一个简单的Linux系统MenuOS <步骤指导> 1、在实验楼环境下: cd LinuxKernel/ qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img 即可启动内核,完成后进入 menu 程序,支持三个命令help、version和quit。 2、使用自己的Linux系统环境搭建MenuOS的过程 # 下载内核源代码编译内核 cd ~/LinuxKernel/ wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.6.tar.xz xz -d

进程间通信之管道

旧城冷巷雨未停 提交于 2020-03-12 11:16:39
文章目录 1进程间通信:管道 1进程间通信:管道 进程间通信 IPC: inter‐process communicating 两个进程之间互相交换数据,称为进程间通 信。 进程A 进程B 进程间通信 四种方式: ① 管道pipe ② 消息队列message queue ③ 共享内存shared memory ④ 网络套接字socket 管道 管道:pipe,是Linux操作系统提供的一个消息传递机制。 ① 系统中创建一个文件,其文件类型为管道 mkfifo ~/project/message ② 进程A: 打开open该文件,向文件写入write数据 ③ 进程B: 打开open该文件,从文件读取read数据 于是,数据 从进程A传递到进程B。。。显然,管道文件 并不是普通的文件。 管理文件不是普通的文件。。。 ls ‐l message prw‐rw‐r‐‐1 mytest mytest 0 8月 19 02:48 message (首字母为p,表示其类型为pipe) 演示 write.cpp : 向pipe中写入数据 read.cpp: 从pipe中读取数据 (1) open是阻塞的 一个发送方,一个接收方,都齐备时才返回 (2) read是阻塞的 (3) 管道是单向的 这意味着两个进程之间可能要建立两个管道 (4) 和普通文件 区别?? 小结: 1,管道意义 2

北航软件学院复试专业课知识点梳理(操作系统部分)

孤街浪徒 提交于 2020-03-12 07:35:46
1.并发是指一段时间运行多个程序,并行是同一时刻多个指令,并行一般需要硬件支持,并发是通过进程线程实现的 2.共享是指系统中的资源可以被多个并发进程共同使用 3.虚拟技术把一个物理实体转换为多个空间实体,分为时分复用(多进程并发)和空分复用(虚拟内存) 4.操作系统基本功能: 1)进程管理 (进程控制,进程同步,进程通信,死锁处理) 2)内存管理 (内存分配,地址映射,内存保护与共享,虚拟内存) 3)文件管理 (文件存储空间管理、目录管理、读写管理和保护) 4)设备管理 (缓冲管理、设备分配、虚拟设备、设备处理) 5.进程控制块(Process Control Block,PCB)描述进程基本信息和运行状态,所谓的创建进程和撤销进程,都是对PCB的描述。 6.进程是资源分配的基本单位,线程是独立调度的基本单位 7.进程调度算法 1)批处理系统 由于没有过多用户操作,因此需要保证吞吐量和周转时间 a.FCFS b.SJF c.SRTN(最短剩余时间优先) 2)交互式系统 由于有大量用户操作,因此目的是快速相应 a.时间片轮转 b.优先级调度(可以随着时间推移增加优先级) c.多级反馈队列(每个队列时间片不同,如1,2,4,8) 8.经典同步问题 生产者-消费者 读者-写者 哲学家就餐 9.进程间通信(IPC) 1)管道pipe,支持半双工通信(单向传输),只能在父子进程汇总使用 2

Windows下的动态链接 之 DLL简介

亡梦爱人 提交于 2020-03-12 03:55:06
Windows下的动态链接 之 DLL简介 DLL简介 1.1 进程地址空间和内存管理 1.2 基地址和 相对地址(RVA) 1.3 DLL共享数据段 1.4 DLL 的简单例子 1.5 创建 DLL 1.6 使用 DLL 1.7 使用模块定义文件 1.8 DLL 显示运行时链接 DLL简介 DLL 即**动态链接库(Dynamic-Link Library)**的缩写,它相当于Linux下的共享对象。Window 系统大量采用了这种 DLL 机制,甚至包括 Windows 的内核的结构都很大程度依赖于 DLL 机制。Windows 下的 DLL 文件和 EXE 文件实际上是一个概念,它们都是有 PE 格式的二进制文件,稍微有些不同的是 PE 文件的头部中有个符号位表示该文件是 EXE 或者是 DLL,而 DLL 文件的扩展名不一定是.dll,也有可能是别的比如.ocx(OCX控件)或是.CPL(控制面板程序)。 DLL 的设计目的与共享对象有些出入,DLL 更加强调模块化,即微软希望通过 DLL 机制加强软件的模块化设计,使得各个模块之间能够松散的组合、重用和升级。所以我们在 Windows 平台上看到大量的大型软件设计都通过升级 DLL 的形式进行自我完善,微软经常将这些升级补丁积累到一定程度以后形成一个软件更新包(Service Packs)。比如我们常见的微软 Office

linux下进程间通信

妖精的绣舞 提交于 2020-03-10 23:40:44
一、进程间通信方式 如果多个进程之间需要协同处理某个任务时,这时就需要进程间的同步和数据交流。常用的进程间通信(IPC,InterProcess Communication)的方法有: 1.信号(sinal) :信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。 2. 管道(Pipe) :管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系(通常是指父子进程关系)。 3.命名管道FIFO :命名管道(Named Pipe)也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。 4. 命名socket或UNIX域socket(Named Socket或Unix Domain Socket) :socket也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同进程间的进程通信。 5. 信号量(Semaphore) :信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。 6. 共享存储(Shared Memory) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制

网络socket多进程编程之服务器

ぃ、小莉子 提交于 2020-03-10 18:40:12
文章目录 fork系统调用 网络socket多进程编程之服务器代码示例 在写多进程编程之前,我们先了解一下fork系统调用。 fork系统调用 ①Linux内核在启动的最后阶段会创建init进程来执行序/sbin/init,该进程是系统运行的第一个进程,进程号为 1,称为Linux 系统的初始化进程,该进程会创建其他子进程来启动不同写系统服务,而每个服务又可能创建不同的子进程来执行不同的程序。Linux 中维护着一个数据结构叫做 进程表,保存当前加载在内存中的所有进程的有关信息,其中包括进程的 PID(Process ID)、进程的状态、命令字符串等,操作系统通过进程的 PID 对它们进行管理,这些 PID 是进程表的索引。 ②Linux下有两个基本的系统调用可以用于创建子进程:fork()和vfork()。在我们编程的过程中,一个函数调用只有一次返回(return),但由于fork()系统调用会创建一个新的进程,这时会有两次返回。一次返回是给父进程,其返回值是子进程的PID(Process ID),第二次返回是给子进程,其返回值为0。所以我们在调用fork()后,需要通过其返回值来判断当前的代码是在父进程还是子进程运行,如果返回值是0说明现在是子进程在运行,如果返回值>0说明是父进程在运行,而如果返回值<0的话,说明fork()系统调用出错。fork 函数调用失败的原因主要有两个