
linux_进程间通信
now
讀书会上瘾
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
linux——信号量
临界资源:多道程序系统种存在许多进程,他们共享各种资源,然而有很多资源一次智能供一个进程使用。一次仅允许一个进程使用的资源称为临界资源。当semget创建新的信号量集合时,必须指定集合中信号量的个数(即num_sems),通常为1;信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。信号量:与已经介绍过的IPC(进程间通信)结构不同,它是一个计数器。钥匙:信号量 房间:临界资源。信号量集:相当于信号量的集合。运行结果:子进程内容先打印,然后父进程打印。原创 2023-04-12 23:40:24 · 122 阅读 · 0 评论 -
linux——linux信号4(信号携带消息2)
gcc nicesignal.c -o pro:生成可执行pro文件。gcc send.c -o send:生成可执行发送send文件。原创 2023-04-12 19:42:52 · 288 阅读 · 0 评论 -
linux——linux信号3(信号如何携带消息)
sa_flag如果设置为 SA_SIGINFO 属性时,说明了信号处理程序带有附加信息,也就是会调用 sa_sigaction 这个函数指针所指向的信号处理函数。sa_mask 成员,设置在其的信号集中的信号,会在捕捉函数调用前设置为阻塞,并在捕捉函数返回时恢复默认原有设置。这样的目的是,在调用信号处理函数时,就可以阻塞默写信号了。sigaction 是一个系统调用,根据这个函数原型,我们不难看出,在函数原型中,入门:发信号kill,收信号signal,重点放在了动作上,忽略了消息。补充:(对信号的忽略)原创 2023-04-12 18:38:13 · 310 阅读 · 0 评论 -
linux——linux信号2(信号编程)
ctrl+c无法关闭可以实现,用kill -9 PID绕不过杀死进程,该进程还是被强制退出。此处signum与pid位置与上方的kill的api相反,根据实际需求写。高级:sigaction函数。代码演示:实现信号ctrl+c,关闭不了进程。入门:signal函数。高级:sigqueue。./a.out 9 pid号。原创 2023-04-12 16:59:01 · 301 阅读 · 0 评论 -
linux——linux信号1(基础认识)
捕捉信号:需要高速内核,用户希望如何处理某一种信号,说白了就是写一个信号处理函数,然后将这个函数高速内核。当该信号产生时,由内核来调用用户自定义的函数,以此来实现某种信号的处理。比如,终端用户输入了ctrl+c来中断程序,会通过信号机制停止一个程序。忽略信号:大多数信号可以使用这个方式来处理。系统默认动作:对于每个信号来说,系统对应默认的处理动作,当发生了该信号,系统会自动执行。信号定义在 signal.h,头文件中,信号名都定义为正整数。比如敲门——需要开门,手机响了——需要接通,信号优先级。原创 2023-04-12 15:52:34 · 268 阅读 · 0 评论 -
linux——共享内存概述
3、数据交换——写入(strcpy),读取(p指针指向内存空间,print(p))先运行./w文件写入共享空间内容,再打开一个界面./r来读取共享空间中的内容。6、信号量(不作为进程间通信的方式,控制一个临界资源)需要信号量来控制共享内存同时不能有两个进程写入(对应后边博客信号量)4、共享内存(有一块公共内存shm可挂载A\B上)3、消息队列(可以发送,也能接收消息)1、创建/打开共享内存——shmget。5、干掉共享内存——shmctl。4、释放共享内存——shmdt。2、映射——shmat。原创 2023-04-11 22:01:57 · 179 阅读 · 0 评论 -
linux——消息队列通信(键值生成&消息队列移除)
如指定文件的索引节点号为65538,换算成16进制为0x010002,指定的id为38,换算成16进制为0x26,则最后key_t返回值为0x26010002。系统建立IPC通讯(消息队列、信号量和共享内存)时必须指定一个id值。通常情况下,该id值通过ftok函数得到。如果要确保key_t值不变,需要确保ftok的文件不被删除,或者不用ftok,指定一个固定key_t值。一般在UNIX实现中,是将文件的索引节点号取出,前面加上子序号得到key_t的返回值。编译运行:可以看到两个相同的key值。原创 2023-04-11 19:15:19 · 337 阅读 · 0 评论 -
linux——消息队列通信原理
3、消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。消息队列,是消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识。如果没有与键值key相对应的消息队列,并且flag中包含IPC_CREAT标志位。2、消息队列独立于发送与接收进程。进程终止时,消息队列及其内容不会被删除。特点:1、消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。1、如何创建消息队列(A\B使用同一个队列通信)2、如何加消息到队列(队列是链表)原创 2023-04-11 18:30:50 · 144 阅读 · 0 评论 -
linux——FIFO命名管道(调用open打开管道)
而只写open将出错返回-1,如果没有进程已经为读而打开该FIFO,其errno置ENXIO。若没有执行O_NONBLOCK(默认),只读open要阻塞到某个其他进程为写而打开此FIFO。类似的,只写open要阻塞到其他进程为读而打开它。可以看到,write每隔1s往file文件中写入一次数据,read从file中取出数据并打印出来。gcc write.c -o write:生成可执行write文件。gcc read.c -o read:生成可执行read文件。./read:运行read。原创 2023-04-11 00:16:05 · 574 阅读 · 0 评论 -
linux——FIFO命名管道(创建管道,生成特殊文件)
一旦创建一个FIFO,就可以用一般的文件I/O(open、read、write)函数操作它。2、FIFO有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中。当文件夹中没有file文件时,创建file并提示创建成功;1、FIFO可以在无关进程之间交换数据,与无名管道不同。3、最终修改为不管文件夹有没有file文件,都不报错,也不报成功。编译运行,ls -l 可以看到生成一个file文件。FIFO,也称为命名管道,它是一种文件类型。api原型:(man 3 mkfifo查看)原创 2023-04-10 22:57:09 · 468 阅读 · 0 评论 -
linux——IPC进程间通信概述(InterProcess Communication)、建立无名管道
③它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write等函数。· ②只能用于具有亲缘关系的进程之间的通信(也就是父子进程或者兄弟进程)单机:管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、要关闭管道,只需要将这两个文件描述符关闭即可close(fd[0]);特点:①它是半双工的(数据只能在一个方向上流动),具有固定的读端和写端。1、管道:通常指无名管道,是UNIX系统IPC最古老的形式。fd[0]为读而打开,fd[1]为写而打开。原创 2023-04-10 22:02:20 · 231 阅读 · 0 评论