自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 19 POSIX信号量

文章目录POSIX信号量的概念初始化、释放、等待、发布信号量基于环形队列的生产消费模型代码实现POSIX信号量的概念POSIX信号量和SystemV信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源目的。 但POSIX可以用于线程间同步。信号量的本质是一个描述临界资源有效个数的计数器。初始化、释放、等待、发布信号量#include <semaphore.h> int sem_init(sem_t *sem, int pshared, unsigned int va

2021-10-30 12:07:08 541

原创 18 Linux线程

文章目录一、线程的基础概念1.1. 线程是什么在Linux中没有真正意义上的线程,线程是用进程模拟的,数据结构也是用的task_struct1.2. 线程的优点1.3. 线程的缺点1.4. 线程的用途二、线程的操作2.1. 创建线程2.2. 线程的异常2.3. ps -aL查看轻量级进程2.4. 获取当前线程的线程ID2.5. 线程的终止(1)从线程函数return(2) 调用pthread_exit() 终止自己(3) 调用pthread_cancel终止同一进程的另外一个线程2.6. 线程的等待2.6.

2021-10-29 19:38:19 4272 5

原创 17 Linux进程信号

由于操作系统是进程的管理者,因此所有信号都必须经过操作系统发出。文章目录一、信号的概念1.1.ctrl c发送前台信号1.1.1.用signal系统调用接口验证ctrl c是信号SIGSTOP和SIGKILL不可捕获1.1.2.小结二、信号的常见处理方式三、信号的产生3.1.通过终端按键产生信号3.2.通过调用系统函数向进程发信号3.2.1.kill3.2.2.raise3.2.3.abort3.3.由软件条件产生信号3.3.1.alarm3.3.2.利用alarm验证IO对效率的影响3.4.由硬件异常

2021-10-24 11:13:44 1177 11

原创 16 进程间通信

要让两个进程实现通信,前提条件是让两个进程看到同一份资源。文章目录一、进程间通信1.1.进程间通信的目的1.2.进程间通信分类二管道2.1.Linux下的管道2.1.1.父子进程之间的管道2.1.2.为什么stdin,stdout,stderr会被默认打开?2.1.3.打开的文件struct file为什么不会被继承2.2.匿名管道2.3.管道的读写规则2.3.1.进程间同步当没有数据可读时,读端阻塞当管道满的时候,写端阻塞2.3.2.关闭文件描述符关闭写端,读取端读取到文件末尾,read返回0值关闭读

2021-10-21 13:05:22 320 2

原创 15 生成动静态库

之前在gcc/g++了解过动静态库,此次对其进一步理解并且自己制作动静态库。另外,库的名称要去掉前缀和后缀,如:libc.so -> c库,要去掉前缀lib,去掉后缀.so,.a文章目录动态库和静态库生成静态库生成动态库动态库和静态库补充内容:静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。一般默认生成的可执行程序都是动态的,动态库体积小,运行时加载,只

2021-10-17 23:13:06 307 1

原创 14 软硬链接

文章目录文件系统inode软硬链接软连接硬链接软硬链接的区别总结文件系统文件=属性+内容在Linux中,一般把属性数据集合在一起,取名为inode,而内容则保存在block中。一般一个文件只有一个inode,但有多个数据块block。但是硬盘当中有多个文件,所以就会有多个inode和block,操作系统会将这些inode管理起来,形成inode表。所以文件系统其实是分区的整体化描述,比如基本情况,空间一共多大,inode,block等信息。所以使用ls -l的时候看到的除了看到文件名,还看

2021-10-17 17:01:52 1182 2

原创 13 Linux下的基础IO

文章目录C语言中的文件接口C语言中的文件接口在C语言文件操作时学过文件接口C语言中的文件接口

2021-10-17 12:09:45 3359 13

原创 12 Linux进程的控制

文章目录一、fork的补充1.1.写时拷贝1.2.fork调用失败的原因二、进程终止2.1.退出码2.2.正常退出returnexit_exit和exit的区别2.3.异常退出三、进程等待3.1.进程等待的方法waitwaitpidstatus3.2.创建多进程3.3.非阻塞等待子进程3.4.总结四、进程程序替换4.1.进程替换的函数4.2. execve五、实现一个简单的shell六、补充和总结内容一、fork的补充在之前已经了解了fork函数,这个函数是以父进程为“模板”创建子进程。父子进程的所有

2021-10-13 10:41:42 1021 1

原创 11 进程地址空间

研究背景:kernel 2.6.32 32位平台文章目录进程地址空间虚拟地址为什么要有虚拟地址补充内容进程地址空间在之前进程地址空间我们学习的是用户空间:可以通过下面的代码验证空间分布:#include<stdio.h>#include<stdlib.h> int g_val=100; int g_unval; int main(int argc,char*argv[],char*env[]) { printf("

2021-10-11 14:16:53 290 1

原创 10 Linux环境变量

在Linux下,命令实际上也是一个放在磁盘中的可执行文件,要执行一条命令一般分为两步:1.找到这条命令 2.运行它的可执行文件文章目录一、什么是环境变量二、常见的环境变量PATHHOMESHELL三、环境变量的组织方式四、使用代码获取环境变量五、通过系统调用函数获取环境变量六、环境变量通常是具有全局属性的七、补充几个和环境变量相关的命令总结:一、什么是环境变量环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数如:我们在编写C/C++代

2021-10-10 17:53:27 1112 6

原创 09 Linux进程的概念

文章目录一、什么是进程二、进程管理2.1.描述进程--PCB2.2.查看进程2.2.1.使用ps命令查看2.2.2.通过系统目录查看三、通过系统调用函数获取进程标示符PID和PPID四、fork创建子进程4.1.补充内容五、进程状态R 可执行状态S 可中断睡眠状态D 不可中断睡眠状态T/t 暂停状态和跟踪状态X 死亡状态三种进程的基本状态和切换补充内容:echo $?六、kill杀死(中断)进程七、Z 僵尸进程7.1.僵尸进程的危害八、孤儿进程九、进程优先级9.1. ps -l查看优先级9.2. PRI和N

2021-10-09 22:43:25 2759 12

原创 08 冯 • 诺依曼体系结构和操作系统

文章目录冯 • 诺依曼体系结构为什么需要存储器(内存)操作系统冯 • 诺依曼体系结构一个程序在运行起来的第一件事情是将程序加载到内存当中。笔记本、服务器等计算机,大部分都遵守冯诺依曼体系:运算器:对数据进行算术/逻辑运算。控制器:是计算机的指挥中心,负责决定执行程序的顺序,给出执行指令时机器各部件所需要的操作控制命令。进行非数据性的逻辑控制,比如什么时候将数据加载到内存。运算器与控制器统称为中央处理器(CPU)。常见的输入设备:键盘、鼠标、摄像头、麦克风、网卡、硬盘等。常见的输出设备:显

2021-10-07 23:02:13 681 3

原创 07缓冲区与回车\r和换行\n

文章目录缓冲区回车\r和换行\n缓冲区缓冲区(buffer),它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区,显然缓冲区是具有一定大小的。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。所以对于下面的程序:程序会先休眠5秒,然后打印字符串hello之后结束运行。这是因为在执行printf时,字符串hello被写入到了C程序的缓冲区中,但并没有输出到显示器上,执行完sleep后,缓冲

2021-10-02 23:43:45 1143 3

原创 06项目自动化构建工具-make/Makefile

make是一个命令,makefile是一个文件,通常该文件会在当前工作目录下存放。在VS当中,项目管理(多文件管理)是VS帮我们自动管理的。但是在Linux中,维护项目文件关系的工作(比如同时编译链接多个文件),需要让make、makefile来完成。所以makefile带来的好处就是“自动化编译”,一旦写好,只需一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。文章目录依赖关系和依赖方法使用Makefile实现多文件编译使用Makefile清理项目依赖关系和依赖方法如果对A

2021-10-02 21:24:40 576 2

原创 05gcc/g++和gdb使用

一般生成C/C++可执行程序需要经过以下四个步骤:1.预处理(头文件展开、去注释、宏替换、条件编译)。2.编译(C代码翻译成汇编语言)。3.汇编(汇编代码转为二进制目标代码)。4.链接(将目标文件和系统库进行链接形成可执行程序)。gcc/g++就是用来实现这四个步骤的,gdb则是一个调试器,用来debug。Linux默认生成的可执行程序是动态链接且以release方式发布的!文章目录编译器gcc/g++预处理编译汇编链接动态库和静态库调试器gdb调试显示断点退出gdb补充内容编译器gcc/g++

2021-10-02 16:39:34 977 5

原创 04 vi/vim文本编辑器

vi/vim都是多模式的文本编辑器,可以进行代码编写。不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window、 mac os、windows。一个集成开发工具比如VS2019具有:编写代码、编译代码、debug代码等功能,而vim就是Linux下负责编写代码的工具。文章目录vim常用的三种模式vim切换模式的基本操作vim简单配置vim命令模式常用的命令移动光标删除复制粘贴剪切替换大小写转换撤销和重

2021-10-01 22:20:08 475 4

原创 03软件包管理器rpm和yum

yum相当于Linux下的一个应用商店。能够帮助我们查找、下载、安装软件yum一般需要用root用户来执行或者给普通用户使用sudo权限提升,因为安装软件时需要向系统目录中写入内容,如果没有写的权限或者写入的权限不够高就会写入失败进而导致安装失败。文章目录一、Linux安装软件常用的三种方式二、rpm2.1.rpm包的查找指令2.2.rpm包的其他查询指令2.3.卸载rpm包2.4.安装rpm包三、yum是什么3.1.yum查找、安装和卸载四、安装lrzsz并实现Linux与主机互传文件五、yum安装

2021-10-01 16:23:39 561 4

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除