
Linux进程与进程通信
文章平均质量分 82
朝辞暮见
关于DeepSeek、开源程序、定制办公自动化工具的学习,请大家可以关注抖音号:1754045136(树懒君)
展开
-
msgctl()函数
原文链接:链接通过msgctl()函数,我们可以直接控制消息队列的行为。它在系统库linux/msg.h 中的定义是这样的:系统调用: msgctl()函数声明: int msgctl ( int msgqid, int cmd, struct msqid_ds *buf )返回值: 0 on success-1 on error: errno = EACCES (No read p...转载 2018-08-01 16:37:25 · 6428 阅读 · 0 评论 -
msgrcv()函数
原文链接:链接msgrcv()函数被用来从消息队列中取出消息。它在linux/msg.h中的定义是这样的:系统调用: msgrcv()函数声明: int msgrcv ( int msqid, struct msgbuf *msgp, int msgsz, longmtype,int msgflg )返回值: Number of bytes copied into message ...转载 2018-08-01 16:35:34 · 36375 阅读 · 1 评论 -
msgsnd()函数
原文链接:链接从函数名就可以看出,msgsnd()函数是用来向消息队列发送消息的。在linux/msg.h 它的函数定义是这样的:系统调用: msgsnd()函数声明: int msgsnd ( int msqid, struct msgbuf *msgp, int msgsz, int msgflg )返回值: 0 on success-1 on error: errno = EA...转载 2018-08-01 16:34:36 · 4326 阅读 · 0 评论 -
ftok()函数
原文链接:链接系统建立IPC通讯(如消息队列、共享内存时)必须指定一个ID值。通常情况下,该id值通过ftok函数得到。ftok原型如下:key_t ftok( char * fname, int id )fname就时你指定的文件名,id是子序号。在一般的UNIX实现中,是将文件的索引节点号取出,前面加上子序号得到key_t的返回值。如指定文件的索引节点号为65538,换算成16进...转载 2018-08-01 16:31:12 · 1198 阅读 · 0 评论 -
条件变量、pthread_cond_init
原文链接:链接1.初始化条件变量pthread_cond_init#include <pthread.h>int pthread_cond_init(pthread_cond_t *cv,const pthread_condattr_t *cattr);返回值:函数成功返回0;任何其他返回值都表示错误初始化一个条件变量。当参数cattr为空指针时,函数创建的是一个缺...转载 2018-08-01 14:55:58 · 852 阅读 · 0 评论 -
互斥锁 pthread_mutex_init()函数
原文链接:链接linux下为了多线程同步,通常用到锁的概念。posix下抽象了一个锁类型的结构:ptread_mutex_t。通过对该结构的操作,来判断资源是否可以访问。顾名思义,加锁(lock)后,别人就无法打开,只有当锁没有关闭(unlock)的时候才能访问资源。即对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为" 互斥锁" 的标记,这个标记用来保证在任一时刻...转载 2018-08-01 14:45:03 · 7165 阅读 · 0 评论 -
条件变量pthread_cond_t怎么用
原文链接:链接最近看《UNIX环境高级编程》多线程同步,看到他举例说条件变量pthread_cond_t怎么用,愣是没有看懂,只好在网上找了份代码,跑了跑,才弄明白 [cpp] view plaincopy#include <pthread.h> #include <stdio.h> #include <stdlib.h> pthre...转载 2018-08-01 14:29:59 · 299 阅读 · 0 评论 -
在线程间同步与互斥的关系
原文链接:链接现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行。在多任务操作系统中,同时运行的多个任务可能: 都需要访问/使用同一种资源 多个任务之间有依赖关系,某个任务的运行依赖于另一个任务 这两种情形是多任务编程中遇到的最基本的问题,也是多任务编程中的核心问题,同步和互斥就是用于解决这两个问题的。 互斥:是指散步在不同任务之间的若干程序片断,当某...转载 2018-07-25 20:11:05 · 515 阅读 · 0 评论 -
信号
1. 信号通信1) 信号是一种异步通信方式,是软件层次上对中断机制的一种模拟。2) 信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了哪些系统事件。3) 如果该进程当前并未处于执行态,则该信号就由内核保存起来,直到该进程恢复再执行再传递给它;如果一个信号被进程设置为阻塞,则该信号的传递被延迟,直到其阻塞被取消时才被传递给进程。 2. 用户进程对信号的相应...原创 2018-05-24 14:24:42 · 254 阅读 · 0 评论 -
IPC对象之信号量
1. 信号量1)信号量(semaphore),也叫信号灯。它是不同进程间或一个给定进程内部不同线程间同步的机制。2)二值信号量:值为0或1。与互斥锁类似,资源可用时值为1,不可用时值为0。3)计数信号量:值在0到n之间。同来统计资源,其值代表可用资源数。4)等待操作是等待信号量的值变为大于0,然后将其减一;而释放操作则相反,用来唤醒等待资源的进程或者线程。 2. 信号量编程函数在Linux系统中,...原创 2018-05-24 10:50:23 · 810 阅读 · 0 评论 -
IPC对象之消息队列
1. 消息队列1)消息队列由消息队列ID来唯一标识。2)消息队列就是一个消息的列表。用户可以在消息队列中添加消息、读取消息等。3)消息队列可以按照类型来发送/接收消息。4)消息队列的操作包括创建或打开消息队列、添加消息、读取消息和控制消息队列。5)创建或打开消息队列使用的函数是msgget,这里创建的消息队列的数量会受到系统消息队列数量的限制。6) 添加消息使用的函数msgsnd,按照类型把消息添...原创 2018-05-23 21:08:17 · 478 阅读 · 0 评论 -
IPC对象之共享内存
1. 共享内存特点1)共享内存是一种最为高效的进程间通信方式,进程可以知点解读写内存,而不需要任何数据的拷贝。2)为了在多个进程间交换信息,内核专门留出了一块内存,可以由需要访问的进程将其映射到自己的私有地址空间。3)进程可以直接读写这一块内存而不需要进行数据的拷贝。4)由于多个进程共享一段内存,因此需要依靠某种同步机制,如互斥锁和信号量等。 2. 共享内存实现1)创建/打开共享内存2)映射共享内...原创 2018-05-23 19:54:37 · 329 阅读 · 0 评论 -
无名管道pipe与有名管道fifo
一、无名管道pipe:1. 无名管道特点:1)只能用于具有亲缘关系的进程之间的通信。2)半双工的通信模式,具有固定的读端和写端。3)管道可以看成是一种特殊的文件,对于它的读写可以使用文件IO如read、write函数。 2.管道创建与关闭1)管道是基于文件描述符的通信方式。当一个管道建立时,它会创建两个文件描述符fd[0]和fd[1]。其中fd[0]用于读,fd[1]用于写管道。2)构成了一个半双...原创 2018-05-23 18:57:32 · 692 阅读 · 0 评论 -
Linux线程互斥
1. 线程间互斥1)通过互斥锁达到线程互斥的目的2)互斥锁的目的是用来保证共享数据操作的完整,3)保护临界资源,即任何时刻最多只能有一个线程能访问该资源4)线程必须先获得互斥锁才能访问临界资源,访问完资源后释放该锁。如果无法获得锁,线程会阻塞直到获得锁为止。 2. 互斥函数函数pthread_mutex_init()头文件:#include<pthread.h>函数原型:int pth...原创 2018-05-22 21:45:52 · 176 阅读 · 0 评论 -
Linux线程同步
1. 线程间同步同步 (synchronization)指的是多个任务(线程)按照约定的顺序相互配合完成一件事。 2.线程间同步-P/V操作1) 信号量代表某一类资源,其值表示系统中该资源的数量2) 信号量是一个受保护的变量,只能通过三种操作来访问 a)初始化 b)P操作(申请资源) c)V操作(释放资源)3)信号量的值为非负整数4) P(S) 操作和 V(S)...原创 2018-05-22 20:44:49 · 187 阅读 · 0 评论 -
Linux线程
1、线程基础1)每个用户进程有自己的地址空间2)系统为每个用户进程创建一个task_struct来描述该进程 该结构体中包含一个指针指向该进程的虚拟地址空间映射表(0 – 4G)3)task_struct与虚拟地址空间映射表一起用来表示一个进程4)由于进程的地址空间是私有的,因此在进程间上下切换时,系统开销较大5)为了减少系统开销增加系统效率,引进轻量级进程,也称为线程6...原创 2018-05-22 19:30:44 · 165 阅读 · 0 评论 -
Linux守护进程
Linux守护进程1) 守护进程也称为Daemon进程,是Linux中的后台服务进程。守护进程用于执行特定的系统任务。守护进程的生命周期较长,一些守护进程在系统引导时启动,一直运行至系统关闭。2) Linux系统大多数服务都是用守护进程实现的。 1. 查看系统中的守护进程ps -axj父进程ID PPID进程ID PID进程组ID PGID会话期ID ...原创 2018-05-21 20:36:47 · 278 阅读 · 0 评论 -
wait() 与 waitpid()
wait和waitpidwait函数调用该函数使进程阻塞,直到任一个子进程结束【SIGCHLD】或者是该进程接收到了一个信号为止。如果该进程没有子进程或者其子进程已经结束,wait函数会立即返回。头文件:#include<sys/types.h> #include<sys/wait.h>函数原型: pid_t wait(int *st...原创 2018-05-21 19:35:10 · 290 阅读 · 0 评论 -
exit() 与 _exit()
当需要结束一个进程的时候,可以使用exit()函数或_exit()函数来终止该进程。当程序运行到exit()函数或_exit()函数时,进程会无条件停止剩下的所有操作,并进行清理工作,最终将进程停止。 头文件:#include<stdlib.h>函数原型:void exit(int status)函数参数:status 表示让进程结束时的状态,默认使用0表示正常结束返回值:无 头文件:...原创 2018-05-21 18:55:08 · 903 阅读 · 0 评论 -
exec函数族
问题:如果用fork 创建一个进程,但是进程必须是想要执行的另外一个程序? exec函数族提供了一种在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段。在执行完之后,原调用进程的内容除了进程号外,其他全部都被替换了。装载的程序可以使 linux许可的 程序或者脚本。 头文件:#include<unistd.h>...原创 2018-05-21 18:48:00 · 140 阅读 · 0 评论 -
进程创建-fork()
进程创建:fork()函数所需头文件:#include<sys/types.h> #include<unistd.h>函数原型:pid_t fork()函数参数:无函数返回值: 0 子进程 >0 父进程,返回值为创建出的子进程的PID -1 出错fork()函数用于从一个已...原创 2018-05-20 21:29:44 · 597 阅读 · 0 评论 -
进程基础
进程相关概念:1. 进程的基本概念进程是一个独立的可调度的任务。进程是一个程序的一次执行的过程。 2. 进程与程序的区别1)程序是静态的,它是保存在磁盘上的一些指令的有序集合,没有任何执行的概念;进程是动态的,它是程序执行的过程,包括创建、调度、消亡。2)进程是一个独立的可调度的任务,是一个抽象实体,当系统在执行某个程序时,系统会分配和释放各种需要的资源。进程不仅包括程序的指令和数据,还包括程序计...原创 2018-05-20 21:06:28 · 394 阅读 · 0 评论