![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux操作系统
NTZ5bzZKdUw
这个作者很懒,什么都没留下…
展开
-
多路转接IO(select poll epoll )
1.IO类型 四种典型IO:阻塞,非阻塞,信号驱动,异步IO 阻塞:发起IO调用,如果IO就绪条件不满足,就一直等待 非阻塞:发起IO调用,如果IO就绪条件不满足,就立即报错返回。 信号驱动:定义IO信号的处理方式,然后可以处理其他的事情,等待收到IO就绪信号的时候,立即去处理IO(自己处理) 异步IO:IO顺序不确定,发起IO,然后将给系统处理,最后通过信号通知进程。(交给系统处理) 可读事件:一个描述符当前是否有数据可读 可写事件:一个描述符当前是否有可写入的数据 异常事件:一个描述符是否发生了某些异常原创 2020-09-23 00:51:20 · 136 阅读 · 0 评论 -
【Linux学习笔记】----多线程(进程/线程概念、线程控制、同步与互斥、锁、生产者与消费者模型)
1. 进程线程概念 例子: 工厂工人加工零件,一个工厂同时只有一个工人干活(单进程),如果需要同时加工多 个零件。 1.多建厂房,一个厂房至少一个工人 2.一个厂房,多招几个工人 什么是进程? 进程是操作系统资源分配的基本单位 什么是线程 线程是CPU调度的基本单位,是进程中的一条执行流,一个线程对应一个pcb,所以线程也成为轻量级进程。 线程之间的独有与共享 独有:栈、信号屏蔽字、errno、优先级、标识符、寄存器 共享:虚拟地址空间、文件描述符、信号处理的回调函数,用户ID/组ID/工原创 2020-09-06 17:44:07 · 179 阅读 · 0 评论 -
【Linux学习笔记】----生产者与消费者模型(基于信号量实现,基于互斥锁条件变量实现)
1.基于条件变量和互斥锁 代码展示 /*================================================================ * Copyright (C) 2020 Sangfor Ltd. All rights reserved. * * 文件名称:productor_customer.cpp * 创 建 者:caofeng * 创建日期:2020年09月05日 * 描 述:生产者消费者模型 * ======原创 2020-09-06 17:42:46 · 249 阅读 · 0 评论 -
【Linux学习笔记】----进程信号(分类、相关函数)
1.分类 概念 信号是一个软中断,用于实现进程事件的通知,打断当前操作,去处理这个事件 产生 硬件:ctrl+ z(停止)/ctrl+c(退出)/ctrl+| 软件:kill -signum pid、kill(pid,signum)、 raise(signum)、abort()给自己发送SIGABRT信号 alarm(seconds)定时器给自己发送SIGALRM信号 分类 非可靠信号:1-32号 可靠信号:34-64号 注册 向pcb中的sigqueue中添加新结点,并且修改pendin原创 2020-08-24 00:13:41 · 129 阅读 · 1 评论 -
【Linux学习笔记】----进程间通信(管道(命名管道,匿名管道)、共享内存、消息队列、信号量机制)
1.管道 管道 本质:管道是内核中的一块缓冲区,用于实现进程间的通信 通信过程需要用户态到内核态,再到用户态的情况。 特性: (1).半双工通信方式,(可双向传递数据,同一时刻只能单向) (2).生命周期随进程,进程退出,管道释放。 (3).以只读方式打开会阻塞,直到文件以写的方式打开,以只写的方式打开会阻塞,直到文件以读的方式打开。 (4).如果没有数据,读会阻塞,如果数据慢了写操作会阻塞,管道大小(64k) (5).当所有读端被关闭时,(父子进程),写端会阻塞,当所有写端被关闭时,读端读完数据,读端会原创 2020-07-23 00:41:42 · 233 阅读 · 0 评论 -
【Linux学习笔记】----基础IO(标准库IO、系统IO、文件描述符、文件系统、动态库与静态库)
1.标准库IO 所在库:stdio.h,(库函数有缓冲区,退出时要刷新缓冲区,数据才会显示出来) FILE* fopen(const char* filename, char* mode) 作用:打开指定文件 指定文件名:filename: “./test” 操作权限:r(只读), r+(读写), w(只写), w+(读写), a(追加写),a+ (追加读写),b(二进制操作) r+和w+区别:r+文件不存在时报错返回,w+文件不存在创建,存在就清空。 a追加写:不存在,创建新文件。 返回值:失败返回NU原创 2020-07-21 08:11:34 · 190 阅读 · 0 评论 -
【Linux学习笔记】----minishell(C语言版)
1.流程流程 标准输入 输入字符,并且最后一个字符设置为\0 输入解析 将输入的字符读取出来,放到字符串指针数组里, 进程分离与替换 ./minishell放到argv[0]的位置,启动程序,后面输入为的命令 由于我们获取的字符时,将最后的位置\n获取了,所以置NULL。 进程等待 .防止子进程变成僵尸进程。 2.代码展示 #include<stdio.h>//printf #include<sys/wait.h>//wait #include<string.h>//原创 2020-07-17 23:51:48 · 414 阅读 · 2 评论 -
【Linux学习笔记】----进程控制(创建、终止、等待、替换)
1.进程创建 头文件:unistd.h fork pid_t pid =fork(void) 返回值:父进程返回子进程的进程pid,子进程返回0,出错返回-1. 特点:写时拷贝,各自有各自的地址空间,不阻塞,谁先运行不一定。 vfork pid_t pid =vfork(void) 返回值:父进程返回子进程的进程pid,子进程返回0,出错返回-1. 特点:共用虚拟地址空间,调用时阻塞父进程,防止调用栈混乱。 不能使用return 退出,return在main函数中才能退出。 getpid()获取调用进程的原创 2020-07-17 23:30:56 · 142 阅读 · 0 评论 -
【Linux学习笔记】----内存管理(虚拟地址空间,分页,分段,段页,页面置换算法,)
1.虚拟地址空间 空间分布 什么是虚拟地址空间? 虚拟地址空间是程序运行时,操作系统虚拟出来的一段空间,是一个mm_struct结构体。 为什么要虚拟地址空间?好处是什么? 1.程序通过虚拟地址空间,通过页表,实现离散式存储,更好的利用物理内存空间。 2.避免了直接访问物理内存出现的安全性问题。 3.同时也使得程序可以使用更大的空间。 伙伴算法 伙伴算法负责大块连续物理内存的分配和释放,以页框为基本单位。该机制可以避免外部碎片。 per-CPU页框高速缓存 内核经常请求和释放单个页框,该缓存包含预先分配原创 2020-07-13 00:57:18 · 398 阅读 · 0 评论 -
【Linux学习笔记】-----进程相关基本概念(硬件组成,环境变量,进程调度,进程状态等)
1.硬件组成 硬件组成分为五部分:输入,输出,控制器,存储器,运算器。 什么是操作系统? 操作系统是对计算机软硬件资源进行管理的软件。 程序如何运行? 程序先被编译成二进制指令集合,存储在磁盘上,当程序运行时需要被加载到内存。 操作系统如何管理? 先描述再管理。 库函数和系统调用接口的关系? 库函数是封装的系统调用接口,底层是系统调用接口。 系统调用接口是操作系统向上提供的系统核心功能的接口。 2.环境变量 什么是环境变量,环境变量的作用。 环境变量是配置系统运行参数的变量 作用是让系统环境配置更加简原创 2020-07-11 23:07:19 · 127 阅读 · 0 评论 -
【Linux学习笔记】----常用工具详细使用(vim gcc gdb makefile git)
1.yum yum软件包管理工具 -list 可以下载的软件包列表 -install/reinstall name安装软件包/覆盖安装 -remove 卸载软件包 2.vim 模式转换 底行模式 命令行模式下 shift+ ; q 退出 q!强制退出 wq 保存退出 wq!强制保存退出 : num 跳转到指定行位置 set num设置行数 / char 从前向后找 (都可以使用next到下一个位置) ? char从后向前找 命令行模式 esc 回到命令行模式 (1)光标移动 hjkl原创 2020-07-08 17:05:33 · 267 阅读 · 0 评论 -
【Linux学习笔记】----常用指令(不常用的没写)
1.目录 ls 显示目录下的文件和目录 -1单行显示 -l显示详细信息 -a显示隐藏文件 -t以时间排序显示 -s以大小排序显示 -r反向排序显示 -R递归显示子目录下的所有文件 pwd 显示绝对路径,当前用户所在目录 cd 目录 进入某个目录 .当前目录 …/当前目录的上一个目录 ~ 当前用户家目录 -最近访问目录 mkdir 目录名 创建目录 -p递归创建 rmdir 目录名 删除目录 2.文件 3.查找 4.权限 5.打包 6.其他 ...原创 2020-07-08 11:55:06 · 115 阅读 · 1 评论 -
【Linux学习笔记】----进度条小游戏(缓冲区刷新问题)
1.代码展示 #include <unistd.h> #include<stdio.h> #include <string.h> int main() { int i = 0; char buf[101]; memset(buf, 0 ,sizeof(buf)); while(i <= 100 ) { printf("[%-100s][%d%%]\r", buf, i); fflush(stdo原创 2020-07-08 08:57:11 · 174 阅读 · 0 评论 -
虚拟机不联网以及x-shell连接问题
1.首先你得保证你的VM是可以上网的,再去尝试x-shell和虚拟机连接。 如果VM不能上网,就先看看服务里面的是否都在运行。根据网上的教程,不能上网的,很多人都是服务里面的进程被禁止运行了。 2.然后再去设置net模式 3.能够联网之后,输入ifconfig,把下图中的ip复制一下。 4.打开X-shell,新建,复制进去,然后 5.然后把用户名和密码输入,(虚拟机里面创建的用户名和...原创 2020-03-13 13:09:41 · 794 阅读 · 0 评论