
Linux
ssr奥利奥
这个作者很懒,什么都没留下…
展开
-
Linux c++ socket编程 客户端 服务器
服务器#include <iostream>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <unistd.h>#include <string.h>#include <stdlib.h>...原创 2019-12-03 16:56:10 · 493 阅读 · 0 评论 -
线程同步互斥/进程间通信
什么是线程同步和互斥? 同步就是协同步调,按预定的先后次序进行运行。如:你说完,我再说。这里的同步千万不要理解成那个同时进行,应是指协同、协助、互相配合。线程同步是指多线程通过特定的设置(如互斥量,事件对象,临界区)来控制线程之间的执行顺序(即所谓的同步)也可以说是在线程之间通过同步建立起执行顺序的关系,如果没有同步,那线程之间是各自运行各自的! 线程互斥是指对于共享的进程系统资源,在...原创 2019-11-14 11:00:57 · 250 阅读 · 0 评论 -
信号量与互斥量的区别
信号量:那是多线程同步用的,一个线程完成了某一个动作就通过信号告诉别的线程,别的线程再进行某些动作。互斥量:这是多线程互斥用的,比如说,一个线程占用了某一个资源,那么别的线程就无法访问,知道这个线程离开,其他的线程才开始可以利用这个资源。信号量与普通整型变量的区别:信号量(semaphore)是非负整型变量,除了初始化之外,它只能通过两个标准原子操作:wait(semap), sign...转载 2019-11-07 18:53:33 · 5065 阅读 · 0 评论 -
Linux系统编程—线程清理
有时候我们希望线程退出时能够自动的执行某些函数,为了能达到此目的,OS 提供了两个函数帮我们完成这个功能:void pthread_cleanup_push(void (*rtn)(void*), void *arg);void pthread_cleanup_pop(int execute);使用方法如果想要你的线程在退出时能够执行清理函数,你需要使用 pthread_clea...转载 2019-11-07 10:50:55 · 238 阅读 · 0 评论 -
Linux系统编程—共享内存
内核对象内核对象,可以理解为位于内核空间中的某种类型的结构体。一个内核键值必须是我们事先约定好的,通过 get 函数获取内核对象 id 号这种方式我们以前应该见到过类似的,就好像是一对 <key, value> 。这里的 get 函数,通常都是以 get 为后缀的函数名,在共享内存里,对应的这个 get 函数名字为 shmget,其中 shm 的意思是 share memory...转载 2019-11-06 17:01:17 · 335 阅读 · 0 评论 -
管道、消息队列、共享内存、信号量的特点
在之前我们已经了解过了进程间通信的几种方式:管道、消息队列、共享内存以及信号量。今天我们就来总结一下这几种方式的各自的特点分别是什么,和他们相应的应用场景。也是对于这个知识点的一个复习和巩固。Q1:为什么要有进程间通信??? A1: 1、为了传输数据:一个进程需要将它的数据发送给另外一个进程; 2、为了共享资源:多个进程之间有时需要共享同样的一份资源; 3、为了通知事件...转载 2019-11-06 14:49:08 · 474 阅读 · 0 评论 -
Linux系统编程—消息队列
1、消息队列简介消息队列本质上是位于内核空间的链表,链表的每个节点都是一条消息。每一条消息都有自己的消息类型,消息类型用整数来表示,而且必须大于 0。每种类型的消息都被对应的链表所维护:图1 位于内核空间的消息队列.png其中数字 1 表示类型为 1 的消息,数字2、3、4 类似。彩色块表示消息数据,它们被挂在对应类型的链表上。值得注意的是,刚刚说过没有消息类型为 ...转载 2019-11-06 13:37:15 · 148 阅读 · 0 评论 -
Linux进程间通信(五):信号量 semget()、semop()、semctl()
这篇文章将讲述别一种进程间通信的机制——信号量。注意请不要把它与之前所说的信号混淆起来,信号与信号量是不同的两种事物。有关信号的更多内容,可以阅读我的另一篇文章:Linux进程间通信 -- 信号。下面就进入信号量的讲解。一、什么是信号量为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区...转载 2019-11-04 17:03:31 · 512 阅读 · 0 评论 -
IPC操作时IPC_CREAT和IPC_EXCL选项的说明
IPC(包括消息队列,共享内存,信号量)的xxxget()创建操作时,可以指定IPC_CREAT和IPC_EXCL选项。以共享内存为例:当只有IPC_CREAT选项打开时,不管是否已存在该块共享内存,则都返回该共享内存的ID,若不存在则创建共享内存当只有IPC_EXCL选项打开时,不管有没有该快共享内存,shmget()都返回-1所以当IPC_CREAT | IPC_EXCL时, 如果没有...原创 2019-11-04 16:00:23 · 3001 阅读 · 1 评论 -
Linux进程间通信(一)之无名管道(PIPE)和有名管道(FIFO)
何为进程间通信进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。简单说就是进程之间可以相互发送数据。 IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。Socket用在网络编程中。管道管道通常指无名管道,是 ...转载 2019-11-04 13:47:44 · 304 阅读 · 0 评论 -
管道通信的特点及有名管道和无名管道的区别
管道通信的特点1.管道通信是单向的,有固定的读端和写端。2.数据被进程从管道读出后,在管道中该数据就不存在了3.当进程去读取空管道的时候,进程会阻塞;4.当管道往满管道写数据时,进程会阻塞;5.管道的容量是64KB(#define PIPE_BUFFERS 16 include/linux/pipe_fs_i.h)区别:无名管道是无名的,有名管道是有名的; 无名管道只能用于...原创 2019-11-04 13:12:15 · 1819 阅读 · 0 评论 -
Linux进程间通信——pipe应用实例
管道(pipe):管道可用于具有亲缘关系的进程间的通信,是一种半双工的方式,数据只能单向流动,允许一个进程和另一个与它有共同祖先的进程之间进行通信。PIPE模块程序一下面模块代码是在主函数中创将一个进程,在子进程中往管道中写数据,在父进程中读取数据,也就是一对一的读写操作。/*=====================================...转载 2019-11-01 10:06:23 · 784 阅读 · 0 评论 -
Linux进程间的通信方式和原理
进程通信的方式管道( pipe ):管道包括三种:普通管道PIPE: 通常有两种限制,一是单工,只能单向传输;二是只能在父子或者兄弟进程间使用. 流管道s_pipe: 去除了第一种限制,为半双工,只能在父子或兄弟进程间使用,可以双向传输. 命名管道:name_pipe:去除了第二种限制,可以在许多并不相关的进程之间进行通讯.信号量( semophore ) :信号量是一个计数...原创 2019-10-31 19:47:29 · 212 阅读 · 0 评论