![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
文章平均质量分 65
chenshida_
这个作者很懒,什么都没留下…
展开
-
linux知识(二)互斥量、信号量和生产者消费者模型
linux知识(二)互斥量、信号量和生产者消费者模型一、互斥量产生原因二、信号量生产者消费者模型一、互斥量产生原因使用多线程常常会碰到数据混乱的问题,那么使用互斥量,相当于“加锁”的操作,将有助于解决数据混乱的问题每个线程在对资源操作前都尝试先加锁,成功加锁才能操作,操作结束解锁资源还是共享的,线程间也还是竞争的,但通过“锁”就将资源的访问变成互斥操作,而后与时间有关的错误也不会再产生了。#include <stdio.h>#include <string.h>#i原创 2021-03-02 10:48:05 · 209 阅读 · 0 评论 -
linux知识(一) 程序、进程与线程
linux知识(一) 程序、进程与线程程序进程程序如何变成进程?线程线程与进程fork和创建新线程的区别优点程序程序:程序是已编译好的二进制文件,存储在磁盘中,不占用系统资源程序包括:RO段:只读代码段(code段.text段)和常量段(RO data段/.constdata段)RW段:(.data段)已初始化成非0的变量段(全局变量和静态变量)ZI段:(.bss段)未初始化的为0的变量段(全局变量和静态变量)进程进程: 进程是资源分配的最小单位,占用系统资源进程主要包括:RO段:原创 2021-02-28 15:38:42 · 243 阅读 · 2 评论 -
Linux系统编程(五)时序竞态
时序竞态产生原因改进总结产生原因#include <cstdio>#include <stdio.h>#include <sys/time.h>#include <unistd.h>#include <signal.h>#include <stdlib.h>#include <errno.h>void catch_sigalrm(int signo){ printf("pause suces原创 2021-02-23 22:07:36 · 121 阅读 · 0 评论 -
Linux系统编程(九)线程同步
Linux系统编程(八)线程同步一、什么是线程同步?二、互斥量三、条件变量pthread_cond_wait函数pthread_cond_signal函数生产者和消费者模型一、什么是线程同步?线程同步,指一个线程发出某一功能调用时,在没有得到结果之前,该调用不返回。同时其它线程为保证数据一致性,不能调用该功能。二、互斥量Linux中提供一把互斥锁mutex(也称之为互斥量)。每个线程在对资源操作前都尝试先加锁,成功加锁才能操作,操作结束解锁,资源还是共享的,线程间也还是竞争的,但通过“锁”就将资源的原创 2021-02-25 22:25:20 · 104 阅读 · 0 评论 -
Linux系统编程(八)线程
Linux系统编程(八)线程一、什么是线程?二、Linux内核线程实现原理线程共享资源线程非共享资源线程优缺点线程控制原语一、什么是线程?LWP:light weight process 轻量级的进程,本质仍是进程(在Linux环境下)进程:独立地址空间,拥有PCB线程:也有PCB,但没有独立的地址空间(共享)区别:在于是否共享地址空间Linux下: 线程:最小的执行单位 ,进程:最小分配资源单位,可看成是只有一个线程的进程。二、Linux内核线程实现原理类Unix系统中,早期是没有“线原创 2021-02-25 09:47:43 · 76 阅读 · 0 评论 -
Linux系统编程(七)消息队列
Linux系统编程(七)消息队列一、什么是消息队列二、消息队列内部原理三、实现消息队列的收发1.发送消息队列2.接收消息队列四、消息队列与命名管道的比较一、什么是消息队列消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。消息队列也有与管道一样的不足,就是每个数据块的最大长度是有上限的,系统上全体队列的最大总长度也有一个上限二、消息队列内部原理消息队列是消息的链表,存放在内核中并由消息队列标识符表示。内核原创 2021-02-24 23:15:58 · 129 阅读 · 0 评论 -
多线程实现文件的拷贝
#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <sys/mman.h>#include <memory.h>#include <sys/wait.h>#include <pthread.h>#include <s原创 2021-02-24 20:49:01 · 485 阅读 · 0 评论 -
Linux系统编程(六)守护进程
Linux系统编程(六)守护进程一、进程组概念二、会话创建会话的条件守护进程概念守护进程模型创建守护进程一、进程组概念进程组,也称之为作业。代表一个或多个进程的集合。每个进程都属于一个进程组。当父进程,创建子进程的时候,默认子进程与父进程属于同一进程组。进程组ID == 第一个进程ID(组长进程)。所以,组长进程标识:其进程组ID == 其进程ID组长进程可以创建一个进程组,创建该进程组中的进程,然后终止。只要进程组中有一个进程存在,进程组就存在,与组长进程是否终止无关。进程组生存期:进程组创建原创 2021-02-23 22:28:02 · 106 阅读 · 0 评论 -
SIGCHLD信号回收子进程
SIGCHLD信号回收子进程代码问题注意点代码#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/wait.h>#include <signal.h>void handler(int signo){ int status; pid_t pid; while ((pid = waitpid(0, &sta原创 2021-02-23 18:30:49 · 624 阅读 · 0 评论 -
Linux系统编程(四)信号
Linux系统编程(四)信号一、什么是信号?1、信号的本质2、信号来源硬件来源软件来源二、常见信号1.可靠信号和不可靠信号2、不可靠信号主要有以下问题:3、可靠信号与不可靠信号注册机制三、信号处理方式四、信号处理过程五、未决信号和阻塞信号六、信号集操作函数一、什么是信号?1、信号的本质信号在linux中又称为软中断信号,用来通知进程发生了异步事件。进程收到信号必须停止,直到处理完信号后再执行下一条指令。2、信号来源硬件来源终端按键产生信号 ,如(Ctrl + c ,Ctrl + z ,Ctrl+原创 2021-02-22 23:45:58 · 160 阅读 · 0 评论 -
使用mmap实现大文件的复制:单进程与多进程情况
单线程和多进程实现文件的复制(mmap方法)mmap实现大文件的复制单线程和多进程实现文件的复制(mmap方法)一、单线程实现二、多进程实现一般文件实现方法:1.读取(fread)要复制的文件2.写入(fwrite)目标文件mmap实现方法:1.源文件和目标映射到内存空间2.memcpy进行拷贝一、单线程实现#include <cstdio>#include <stdio.h>#include <iostream>#include <unis原创 2021-02-21 22:27:48 · 298 阅读 · 1 评论 -
Linux系统编程(三)进程间的通信
Linux系统编程(三)进程间的通信一、为什么需要进程之间的通信(IPC)?二、管道1.概念2.特质3.原理4.局限性5.代码2.读入数据三、共享存储映射注意事项父子进程通信一、为什么需要进程之间的通信(IPC)?当我们编码时会发现我们使用全局变量并不能在父子进程之间使用,这是为什么呢?是因为进程与进程之间是相互独立,当我们在主进程当中修改那个全局变量的时候,子进程的并不会变,因为两者用户空间的那块地址是不一样的。这时候我们引入了IPC,它是在内核创建了一个缓冲区,进程通过这个缓冲区实现进程之间的通信。原创 2021-02-20 19:19:21 · 120 阅读 · 0 评论 -
Linux系统编程(二)孤儿进程和僵尸进程
Linux系统编程(二)一、exec函数族1.exec函数二、孤儿进程和僵尸进程三、wait和waitpid1.wait函数2.waitpid函数一、exec函数族exec函数使用时,改程序的用户空间的代码和数据会被新程序给替代,会从新程序的启动例程开始。调用exec并不创建新进程,调用前与调用后进程的id并不会改变1.exec函数代码如下(示例):#include <cstdio>#include <stdio.h>#include <sys/wait.h&原创 2021-02-20 10:28:12 · 132 阅读 · 0 评论 -
Linux系统编程(一)
Linux系统编程(一)一、进程和程序二、内存布局内核空间用户空间三、进程状态四、环境变量五、进程共享一、进程和程序程序:是指编译好的二进制文件,存储在磁盘中,不占用系统资源。进程:是系统进行资源分配的基本单位,进程是活跃的程序,占用系统资源。在内存中执行。两者关系:程序运行的时候,会产生进程。二、内存布局内存分为两个区域,一个是内核空间,另一个就是用户空间。内核空间进程陷入内核态后才能够访问的空间。内核中有一块PCB进程控制块,主要负责维护进程相关的信息。栈内存的申请和释放都由编译原创 2021-02-11 13:05:02 · 146 阅读 · 0 评论