Linux系统编程
文章平均质量分 69
Cohen_ina
代码像诗一样优雅
展开
-
Linux系统编程 | 信号
信号的机制进程A给进程B发送信号,进程B收到信号之前执行自己的代码,收到信号之后,不管执行到到程序的什么位置,都要暂停运行,去处理信号,处理完毕之后再继续执行原来的程序。与硬件中断类似,它是一种异步模式。但是信号是在软件层面上是实现的中断,早期通常被称为“软中断”。每个进程收到的所有信号,都是由内核负责发送的进程A给进程B发送信号示意图:信号的状态信号有三种状态:产生、未决和递达信号的产生方式有一下几种情况:1、按键产生,如Ctrl +c、Ctrl+z、Ctrl + \2、系统调用产生,原创 2021-03-21 13:58:22 · 189 阅读 · 0 评论 -
Linux系统编程 | 进程间的通信
什么是进程间通信Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷贝到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC, InterProcess Communication)图解:常用的进程间通信方式1、管道(使用最简单)2、信号(开销最小)3、共享映射区(无血缘关系)4、本地套接字原创 2021-03-19 15:59:09 · 197 阅读 · 0 评论 -
Linux系统编程 | 进程控制
程序和进程程序:程序是指编译好的二进制文件,在磁盘上,占用磁盘空间,是一个静态的概念进程:进程是一个启动的程序,进程占用的是系统资源,如:物理内存、CUP、终端等,是一个动态的概念并行和并发并发:指的是在同一个时间段内,在同一个CPU上,同时运行多个程序,CPU将时间分成时间片,每个进程执行完一个时间片必须无条件的让出CPU使用权。并行:指的是两个或者两个以上的程序在同一时刻发生(需要有多核)PCB-进程控制块说明:每个进程在内核中都有一个进程控制块PCB来维护进程相关的信息,Linux内原创 2021-03-18 15:14:31 · 137 阅读 · 0 评论 -
Linux系统编程 | 文件操作和目录操作续2
dup函数函数描述:复制文件描述符函数原型:int dup(int oldfd);函数参数: oldfd要复制的文件描述符函数返回值:成功:返回最小且没有被占用的文件描述符失败:返回-1,设置errno值代码示例://测试dup函数复制文件描述符#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <uni原创 2021-03-18 09:22:38 · 88 阅读 · 0 评论 -
Linux系统编程 | 文件和目录操作续1
perror和errnoerrno是一个全局变量,当系统调用后若出错会将errno值进行设置,perror可以将errno对应的描述信息打印出来阻塞和非阻塞1、普通文件默认是非阻塞的2、终端设备默认是阻塞的3、管道和套接字文件默认是阻塞的问题:阻塞和非阻塞是文件的属性海事read函数的属性?答:阻塞和非阻塞是文件本身的属性,不是read函数的属性。代码示例:文件和目录文件和目录操作相关函数stat/lstat函数函数描述:获取文件属性函数原型:函数返回值:成功返回0,原创 2021-03-16 21:35:22 · 131 阅读 · 0 评论 -
Linux系统编程 | 文件操作
什么是系统调用系统调用是由操作系统实现并提供给外部应用程序的编程接口(API),是应用程序和系统之间数据交互的桥梁文件描述符一个进程启动之后,默认打开三个文件描述符说明:新打开文件返回文件描述符表中未使用的最小文件描述符,调用open函数可以打开或者创建一个文件,得到一个文件描述符open函数函数描述:打开或者创建一个文件函数原型:函数参数1、pathname参数是要打开或创建的文件名,和fopen一样, pathname既可以是相对路径也可以是绝对路径2、flags参数有一系列常数原创 2021-03-15 22:36:50 · 214 阅读 · 0 评论 -
Linux系统编程 | 使用条件变量实现生产者和消费者模型
代码示例 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <pthread.h> typedef struct node { int data; struct node *原创 2021-02-15 23:31:59 · 129 阅读 · 0 评论 -
Linux系统编程作业|守护进程
知识点回顾进程组和会话:进程组:一个进程组包含多个进程会话:多个组组成一个会话注意点:1、创建会话的进程不能是组长进程2、一般创建会话是父进程先fork子进程,然后父进程退出,让子进程调用setsid函数3、创建一个会话,这个子进程既是会长也是组长;4、只要是创建了会话,这个进程就脱离了控制终端的影响创建守护进程模型:1、父进程fork子进程,然后父进程退出。目的是:子进程肯定不是组长进程,为后续调用setsid函数提供了条件。2、子进程调用setsid函数创建一个新的会话a、该子进原创 2021-02-09 22:45:59 · 272 阅读 · 0 评论