Linux
文章平均质量分 76
linux 知识点及基础操作指令,快速入门,持续更新中……
na小子叫坚强
放弃不难,但坚持很酷!
展开
-
Linux多线程基础(2):生产者与消费者模型、POSIX信号量、读写锁、线程池、单例模式
概览1. 生产者消费者模型1.1 123原则1.2 优点1.3 图示1.4 实现2. POSIX信号量2.1 概念2.2 接口2.2.1 定义2.2.2 初始化2.2.3 阻塞等待2.2.3.1 阻塞方式的等待2.2.3.2 非阻塞方式的等待2.2.3.3 带有超时时间的等待2.2.4 唤醒2.2.5 销毁信号量2.2.6 实现同步与互斥2.3 实现3. 读者写者问题(读写锁)3.1 背景3.2 读写锁接口3.2.1 初始化3.2.2 销毁3.2.3 加锁3.2.3.1 读加锁3.2.3.2 写加锁3.2.原创 2021-05-15 16:52:19 · 174 阅读 · 1 评论 -
Linux多线程基础(1):线程概念、线程控制、线程安全、死锁
概览1. 多线程概念1.1 什么是线程2. 线程控制2.1 创建线程2.2 线程终止2.2.1 return返回2.2.2 void pthread_exit(void *retval)2.2.3 int pthread_cancel(pthread_t thread)2.3 线程等待2.4 线程分离3. 线程安全3.11. 多线程概念1.1 什么是线程linux内核中是没有线程的概念的,而是轻量级进程的概念:LWP,通俗的线程概念其实是c库当中的概念。在一个程序里的一个执行路线就叫线程(thre原创 2021-05-12 19:22:48 · 160 阅读 · 1 评论 -
Linux进程信号
信号1. 信号概念2. 信号的产生2.1 硬件产生2.1.1 ctrl+c:SIGINT(2)2.1.2 ctrl+z:SIGTSTP(20)2.1.3 ctrl+\:SIGQUIT(3)2.2 软件产生2.2.1 kill命令2.2.2 kill函数2.2.3 abort函数3. 信号的注册3.1 位图加sigqueue队列3.2 非可靠信号的注册3.3 可靠信号的注册4. 信号的注销4.1 非可靠信号的注销4.2 可靠信号的注销5. 信号的处理5.1 SIG_DFL:默认处理方式SIGCHILD信号5.原创 2021-05-01 11:22:24 · 272 阅读 · 1 评论 -
Linux进程间通信
1. 进程间通信初识1.1 进程间通信的目的数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。由于进程都拥有自己独立的进程虚拟地址空间,从而导致了进程的独立性,通过进程间通信,可以让不同的进程进行协作。原创 2021-04-28 21:21:29 · 90 阅读 · 1 评论 -
Linux下MiniShell的简单实现
1. 思路在学习了linux进程概念和进程控制以后,简单的来实现一个minishell。启动一个父进程,用以从标准输入里面读取用户输入的命令行内容由父进程解析用户输入的内容中,哪些是命令,哪些是命令行参数,存放进argv数组中父进程fork一个子进程,让子进程进行程序替换(execvp),执行用户输入的命令,对命令参数为NULL,或替换失败的子进程进行退出。父进程阻塞的等待子进程退出(wait),待子进程退出后,再去循环获取用户输入思路图示:2. 实现代码2.1 头文件及宏定义部分#原创 2021-04-20 20:21:44 · 485 阅读 · 1 评论 -
Linux 进程控制
进程查看:ps命令ps -ef —— 查看进程信息ps -aux —— 更为详细的查看进程信息例:ps -aux | grep main —— grep后跟程序名称进程创建进程就是pcb,创建一个进程就是创建了一个pcb,复制了调用fork的这个进程pcb的信息(内存指针、程序计数器、上下文数据)这个新的进程,运行的代码与调用fork的进程一样,并且运行位置也相同。两个进程运行的程序相同:哪个是调用进程(父进程),哪个是新建进程(子进程)在父进程中返回子进程的pid,是大于0的;在子进程中原创 2021-04-19 18:06:07 · 145 阅读 · 1 评论 -
Linux动态库与静态库
概览1. 测试代码2. 动态库与静态库初识3. 动态库3.1 库搜索路径3.1 生成动态库3.2 使用动态库3.3 查看当前程序依赖的动态库3.4 查看文件属性3.5 移动或删掉动态库4. 静态库4.1 生成静态库4.2 使用静态库4.3 移动或删掉静态库5. 使用外部库(延伸)1. 测试代码测试程序://////////////////test.h///////////////////#ifndef __TEST_H__#define __TEST_H__#include <stdio.原创 2021-04-16 18:08:21 · 113 阅读 · 1 评论 -
Linux基础IO
基础IO1.C语言操作文件接口(回顾)1.1 FILE *fopen(const char *path,const char *mode)1.2 size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream)1.3 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)1.4 int fseek(FILE *stream, long offset, int原创 2021-04-15 18:43:38 · 631 阅读 · 6 评论 -
关于 /usr/bin/ld: cannot find -lc的问题
在使用 gcc -static 静态链接时,出现如下错误:/usr/bin/ld: cannot find -lccollect2: 错误:ld 返回 1原因分析:可能是因为静态库没有安装,先检查有没有安装静态库:yum list installed | grep glibc-static如果没有安装,则安装即可:yum install glibc-static...原创 2021-04-11 16:19:50 · 461 阅读 · 1 评论 -
Linux进程概念
概览冯诺依曼体系结构操作系统进程概念调度进程状态冯诺依曼体系结构现代计算机的硬件体系结构 ——计算机应该包含五大硬件单元输入设备 —— 采集数据的,比如典型的键盘,网卡接收网络中的数据输出设备 —— 进行数据输出,比如典型显示器,网卡向网络中发送数据存储器 —— 进行中间数据缓冲(内存),硬盘为外存运算器:进行数据运算 运算器+控制器=CPU中央处理器控制器:进行设备控制所有的设备都是围绕存储器工作的cpu不会直接从输入设备获取数据进行处理,而是先把数据放到存储器中,cpu从存储器原创 2021-04-07 21:43:32 · 141 阅读 · 1 评论 -
Linux 常用工具之yum、vim、gcc、gdb、make/Makefile的使用
目录1.软件包管理工具2.vim编辑器3.gcc编译器4.调试器5.项目自动化构建工具6.项目版本管理工具1.软件包管理工具—— 安装其他软件的工具yum—— linux中默认的管理工具,提供软件包的查看,安装,移除等操作三板斧操作:查看:yum list —— 查看所有软件包yum search —— 搜索指定软件包yum makecache —— 将软件包信息保存到本地安装:yum install —— 安装软件包(安装安装包必须要有管理员权限)首先切换为管理员用户:su r原创 2021-04-07 12:11:12 · 476 阅读 · 2 评论 -
git clone 出现fatal: unable to access ‘https://github 类错误解决方法
git clone 遇到问题:fatal: unable to access ‘https://github.comxxxxxxxxxxx’: Failed to connect to xxxxxxxxxxxxx将命令行里的http改为git重新执行。原创 2021-04-06 19:06:04 · 350 阅读 · 0 评论 -
Linux 常用基础指令之目录指令
目录1. ls 命令(重要)2. pwd 命令(重要)3.mkdir命令(重要)4.rmdir 命令(了解)5.rm 命令(重要)6.cp命令(了解)7.mv命令(重要)8.cd命令(重要)1. ls 命令(重要)—— 浏览目录下的文件信息目录:在windows下常叫文件夹ls默认的情况下浏览的是当前用户(默认为当前主机的登录用户)的家目录家目录:多用户操作系统——操作系统为每一个用户创建的受保护的目录选项:-a 选项:浏览目录下的所有文件,包括隐藏文件—(Linux下文件名以 . 开原创 2021-03-16 23:41:09 · 468 阅读 · 0 评论 -
Linux 常用基础指令之文件指令
目录1.touch 命令(重要)2.stat 命令(了解)3.cat命令(了解)4.more命令(了解)5.less命令(重要)6.head命令(了解)7.tail命令(了解)8.echo命令(重要)文件的时间属性:最后一次访问最后一次更改最后一次状态改变1.touch 命令(重要)touch 一个文件,若文件存在则刷新文件的时间属性,若不存在则创建文件刷新文件时间属性时,如果没有指定刷新哪一个时间属性,则默认使用系统当前时间刷新文件所有时间属性,使用时间时需要加双引号或单引号-d原创 2021-03-20 23:00:36 · 235 阅读 · 0 评论 -
Linux基础指令之文件权限指令
文件访问权限指令:1. umask 命令—— 查看或者设置文件的创建权限掩码,也就是说掩码决定了一个文件的创建的默认权限正规计算方法:在 shell 下创建文件默认给定的权限 111 111 111 777 满权限umask 默认掩码 000 000 010 002方法:给定权限&(~掩码)选项:-S 人性化显示...原创 2021-03-31 14:52:34 · 251 阅读 · 1 评论 -
Linux基础指令之打包指令
目录1.压缩命令2.打包命令1.压缩命令—— 将一个文件按照一些压缩算法,将文件数据从多变少zip/unzip: zip 格式的压缩解压缩,文件后缀名 .zip用法:压缩 zip [压缩包名] [原文件(目录)名]解压缩: unzip [压缩包名]gzip/gunzip: gzip格式的压缩解压缩,文件后缀名 .gz用法:压缩 gzip [原文件名]解压缩:gunzip [压缩包名]bzip2: bzip2格式的压缩解压缩,文件后缀名 .bz2用法:压缩 bzip2 [原文件名]原创 2021-03-31 11:41:34 · 1006 阅读 · 1 评论 -
Linux基础指令之匹配查找指令
目录1.grep 命令2.find 命令1.grep 命令—— 从文件内容中匹配包含某个字符串的行,常用于在某个文件中找函数选项:-i 选项 匹配时忽略大小写-v 选项 反向匹配,匹配不包含指定字符串的行-R 选项 对指定目录下的文件递归逐个进行内容匹配2.find 命令—— 从指定目录中查找指定名称/大小/时间/类型的文件选项:-name 选项 通过文件名找文件find -name ‘文件名称’-type 选项 通过文件类型查找文件(文件类型:f——普通文件 d——目录文件原创 2021-03-24 23:56:42 · 1135 阅读 · 1 评论 -
错误:只允许在 C99 模式下使用‘for’循环初始化声明
错误:只允许在 C99 模式下使用‘for’循环初始化声明解决方法:使用 -std=c99 或 -std=gnu99 来编译代码即可原创 2021-03-26 18:22:14 · 5654 阅读 · 0 评论 -
Linux centos7安装java开发环境JDK16
目录1.下载JDK1.1 选择 JDK Download1.2 注意选择后缀为rpm的包1.3 然后选择下载1.4 在linux中创建jdk安装路径1.5 上传下载的jdk2.安装jdk2.1 卸载自带jdk2.2 开始安装3.配置环境变量3.1 打开配置文件3.2 进行环境变量配置3.3 使配置生效3.4 检查是否配置成功4.测试使用1.下载JDK我这里用的是jdk-16 安装官网下载地址:jdk-16_linux-x64_bin.rpm1.1 选择 JDK Download1.2 注意选择后原创 2021-03-26 00:30:28 · 9357 阅读 · 3 评论