Linux系统编程
文章平均质量分 85
技术过硬的菜鸡
做自己喜欢做的事,走自己想走的路。。。
展开
-
Linux线程间通信之信号量(十九)
Linux线程间通信之信号量(十九)1.信号量2.初始化信号量函数3.信号量减一函数4.尝试对信号量减一函数5.信号量加一函数6.销毁信号量函数7.参考代码1.信号量信号量概述 信号量广泛用于进程或线程间的同步和互斥,信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。 编程时可根据操作信号量值的结果判断是否对公共资源具有访问的权限,当信号量值大于 0 时,则可以访问,否则将阻塞。 PV 原语是对信号量的操作,一次 P 操作使信号量减1,一次 V 操作使信号量加1。 信号量主要用于进程或线原创 2021-10-04 15:53:15 · 506 阅读 · 1 评论 -
Linux线程间通信之信号(十八)
Linux线程间通信之信号(十八)1.1.原创 2021-10-04 15:44:04 · 1113 阅读 · 0 评论 -
Linux线程间通信之条件变量(十七)
Linux线程间通信之条件变量(十七)1.条件变量2.条件变量初始化函数3.释放条件变量函数4.等待条件函数5.限时等待条件函数6.唤醒等待在条件变量上的线程7.参考代码1.条件变量与互斥锁不同,条件变量是用来等待而不是用来上锁的,条件变量本身不是锁! 条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。 条件变量的两个动作:(1)条件不满, 阻塞线程 。(2)当条件满足, 通知阻塞的线程开始工作 条件变量的类型: pthreadcondt。2.条件变量初始化函数原创 2021-09-25 21:34:40 · 811 阅读 · 0 评论 -
Linux线程间通信之读写锁(十六)
Linux线程间通信之读写锁(十六)1.读写锁概述2.初始化读写锁函数3.释放读写锁函数4.申请读锁函数5.申请写锁函数6.释放读写锁函数7.参考代码1.读写锁概述当有一个线程已经持有互斥锁时,互斥锁将所有试图进入临界区的线程都阻塞住。但是考虑一种情形,当前持有互斥锁的线程只是要读访问共享资源,而同时有其它几个线程也想读取这个共享资源,但是由于互斥锁的排它性,所有其它线程都无法获取锁,也就无法读访问共享资源了,但是实际上多个线程同时读访问共享资源并不会导致问题。 在对数据的读写操作中,更多的是读操作,写原创 2021-09-25 21:23:50 · 487 阅读 · 1 评论 -
Linux线程间通信之互斥锁(十五)
Linux线程间通信之互斥锁(十五)1.同步与互斥概述2.互斥锁2.1.互斥锁初始化函数2.2.销毁互斥锁函数2.3.申请上锁函数2.4.解锁函数3.参考代码1.同步与互斥概述现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行。在多任务操作系统中,同时运行的多个任务可能: 都需要访问/使用同一种资源 多个任务之间有依赖关系,某interesting两个问题的。 互斥:是指散步在不同任务之间的若干程序片断,当某个任务运行其中一个程序片段时,其它任务就不能运行它们之中的任一程序片段,只能等到该原创 2021-09-25 21:13:51 · 448 阅读 · 0 评论 -
Linux线程之属性(十四)
Linux线程之属性(十四)1.线程属性1.1.主要结构体成员1.2.线程属性初始化注意1.3.初始化线程属性函数1.4.销毁线程属性所占用的资源函数1.5.线程分离状态的函数:设置线程属性1.6.线程分离状态的函数:获取线程属性1.7.设置线程的栈地址1.8.获取线程的栈地址2.参考代码1.线程属性Linux下线程的属性是可以根据实际项目需要,进行设置,之前我们讨论的线程都是采用线程的默认属性,默认属性已经可以解决绝大多数开发时遇到的问题。 如我们对程序的性能提出更高的要求那么需要设置线程属性,比如可原创 2021-09-20 13:00:31 · 104 阅读 · 0 评论 -
Linux线程之取消(十三)
Linux线程之取消(十三)1.线程取消2.参考代码1.线程取消 int pthread_cancel(pthread_t thread);功能:杀死(取消)线程。参数:thread : 目标线程ID。返回值:成功:0失败: 出错编号。注意:线程的取消并不是实时的,而又一定的延时。需要等待线程到达某个取消点(检查点)。 类似于玩游戏存档,必须到达指定的场所(存档点,如:客栈、仓库、城里等)才能存储进度。 杀死线程也不是立刻就能完成,必须要到达取消点。 取消点:是线程检查是否被取消,并原创 2021-09-11 21:23:42 · 494 阅读 · 1 评论 -
Linux线程之退出(十二)
Linux线程之退出(十二)1.线程的退出2.参考代码1.线程的退出进程中我们可以调用exit函数或exit函数来结束进程,在一个线程中我们可以通过以下三种在不终止整个进程的情况下停止它的控制流。 线程从执行函数中返回。 线程调用pthreadexit退出线程。 线程可以被同一进程中的其它线程取消。 void pthread_exit(void *retval);功能:退出调用线程。一个进程中的多个线程是共享该进程的数据段,因此,通常线程退出后所占用的资源并不会释放。参数:retval:存储原创 2021-09-11 20:57:27 · 1724 阅读 · 0 评论 -
Linux线程之回收资源(十一)
Linux线程之回收资源(十一)1.线程的创建2.参考代码1.线程的创建 int pthread_join(pthread_t thread, void **retval);功能:等待线程结束(此函数会阻塞),并回收线程资源,类似进程的 wait() 函数。如果线程已经结束,那么该函数会立即返回。参数:thread:被等待的线程号。retval:用来存储线程退出状态的指针的地址。返回值:成功:0失败: 非02.参考代码/*******************************原创 2021-09-11 16:44:13 · 430 阅读 · 0 评论 -
Linux线程之创建(十)
Linux线程之创建(十)1.线程的创建2.参考代码1.线程的创建 int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine)(void *),void *arg );功能:创建一个线程。参数:thread:线程标识符地址。attr:线程属性结构体地址,通常设置为 NULL。start_routine:线程函数的入口地址。arg:传给线程函数的参数。返回值:成功:0失原创 2021-09-11 16:39:08 · 335 阅读 · 0 评论 -
Linux多任务编程之线程(九)
Linux多任务编程之线程(九)1.线程概述2.线程函数列表安装3.线程的特点4.线程共享资源5.线程非共享资源6.线程的优缺点7.线程号7.1获取线程号函数1.线程概述在许多经典的操作系统教科书中,总是把进程定义为程序的执行实例,它并不执行什么, 只是维护应用程序所需的各种资源,而线程则是真正的执行实体。 所以,线程是轻量级的进程(LWP:light weight process),在Linux环境下线程的本质仍是进程。 为了让进程完成一定的工作,进程必须至少包含一个线程。进程,直观点说,保存在硬原创 2021-09-11 16:33:54 · 699 阅读 · 0 评论 -
Linux进程间通信之信号(八)
Linux进程间通信之信号1.信号概述1.1.信号的概念1.2.信号的特点1.3.信号的编号1.4.信号的四要素2.信号的产生与动作3.未决信号集合信号阻塞集4.发送信号API4.1.kill函数4.1.1.参考代码4.2.raise函数4.3.abort函数4.4.alarm函数(闹钟)4.4.1参考代码4.5.setitimer函数(闹钟)4.5.1参考代码5.修改信号的处理动作5.1.信号处理方式5.2.signal函数6.信号集6.1.信号集概述6.2.自定义信号集函数6.3.sigprocmask原创 2021-08-29 22:03:17 · 791 阅读 · 0 评论 -
Linux进程间通信之共享内存(七)
Linux进程间通信之共享内存(七)1.共享内存原理1.1.共享内存示意图:2.共享内存的创建和使用2.1获得一个共享存储标识符2.2.共享区映射2.3.解除共享映射区2.4.共享内存控制3.参考代码3.1.共享内存读操作3.2.共享内存写操作3.3..共享内存头文件1.共享内存原理共享内存允许两个或者多个进程共享给定的存储区域。 共享内存的特点 1、共享内存是进程间共享数据的一种最快的方法。一个进程向共享的内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。 2、使用共享内存要注意原创 2021-08-11 22:35:52 · 698 阅读 · 0 评论 -
Linux进程间通信之mmap(六)
Linux进程间通信之mmap(六)1.mmap原理2.Mmap映射3.mmap使用3.1.建立映射区3.2.建立映射区4.参考代码4.1.使用共享内存映射实现两个进程之间的通信4.2.通过匿名映射实现父子进程通信4.3.通过共享内存映射的方式修改文件1.mmap原理存储映射I/O (Memory-mapped I/O) 使一个磁盘文件与存储空间中的一个缓冲区相映射。于是当从缓冲区中取数据,就相当于读文件中的相应字节。于此类似,将数据存入缓冲区,则相应的字节就自动写入文件。这样,就可在不适用read和w原创 2021-08-08 22:39:49 · 436 阅读 · 0 评论 -
Linux进程间通信之消息队列(五)
Linux进程间通信之消息队列(五)1.消息队列概述2.消息队列标识符获取3.消息队列创建和使用4.消息队列的消息的格式5.发送消息6.接收消息6.消息队列的控制7.利用消息队列通信7.1.参考代码(接收)7.2.参考代码(发送)1.消息队列概述消息队列是消息的链表,存放在内存中,由内核维护 消息队列的特点1、消息队列中的消息是有类型的。2、消息队列中的消息是有格式的。3、消息队列可以实现消息的随机查询。消息不一定要以先进先出的次序读取,编程时可以按消息的类型读取。4、消息队列允许一个或多个进程原创 2021-07-31 20:43:00 · 424 阅读 · 0 评论 -
Linux进程间通信之有名管道(四)
Linux进程间通信之有名管道(四)1.有名管道的特点2.有名管道创建和使用3.有名管道读写的特点4.客户端与服务器通信4.1.参考代码(客户端)4.2.参考代码(服务器)1.有名管道的特点命名管道(FIFO)和管道(pipe)基本相同,但也有一些显著的不同,其特点是:1、半双工,数据在同一时刻只能在一个方向上流动。2、写入FIFO中的数据遵循先入先出的规则。3、FIFO所传送的数据是无格式的,这要求FIFO的读出方与写入方必须事先约定好数据的格式,如多少字节算一个消息等。4、FIFO在文件系统原创 2021-07-31 20:27:35 · 413 阅读 · 0 评论 -
Linux进程间通信之无名管道(三)
Linux进程间通信之无名管道(三)1.无名管道概述2.无名管道创建和使用3.无名管道读写的特点4.参考代码5.建立管道和创建父子进程间的通信5.1.参考代码5.2.参考代码1.无名管道概述管道(pipe)又称无名管道。 无名管道是一种特殊类型的文件,在应用层体现为两个打开的文件描述符。管道是最古老的UNIX IPC方式,其特点是: 1、半双工,数据在同一时刻只能在一个方向上流动。 2、数据只能从管道的一端写入,从另一端读出。 3、写入管道中的数据遵循先入先出的规则。 4、管道所传送的数据是无格式的原创 2021-07-31 20:12:42 · 418 阅读 · 0 评论 -
Linux多任务编程之进程(二)
Linux多任务编程之进程(二)1.进程概念1.1单道、多道程序设计(了解)1.2.并行和并发(理解)1.3.进程控制块PCB(了解)2.进程的状态3.进程号3.1.getpid函数3.2.getppid函数3.3.getpgid函数3.2.参考代码4.fork创建进程4.1.fork出来的子进程和父进程之间的关系4.2.参考代码5.回收子进程资源5.1.wait函数5.2.waitpid函数6.僵尸进程孤儿进程守护进程6.1.僵尸进程6.2.孤儿进程6.3.守护进程7. vfork创建进程7.1参考代码8原创 2021-07-29 10:57:25 · 871 阅读 · 1 评论 -
Linux文件IO操作之IO编程(一)
Linux系统编程之IO编程1.文件IO(非缓冲文件系统)1.1打开文件open1.2.关闭文件close1.3.向文件写数据write1.4.从文件读数据read1.5.参考代码2.文件IO(缓冲文件系统)1.文件IO(非缓冲文件系统)1.1打开文件openint open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);功能:打开文件,如果文件不存在则可以选择创建原创 2021-07-26 14:08:05 · 1767 阅读 · 1 评论