
Linux
文章平均质量分 58
本专栏为Linux学习笔记
黑桃_K_
K
展开
-
线程的五种状态
线程从创建、运行到结束总是处于下面五个状态之一:新建状态、就绪状态、运行状态、阻塞状态及死亡状态。1.新建状态(New): 当用new操作符创建一个线程时, 例如new Thread(r),线程还没有开始运行,此时线程处在新建状态。 当一个线程处于新生状态时,程序还没有开始运行线程中的代码 2.就绪状态(Runnable) 一个新创建的线程并不自动开始运行,要执行线程,必须调用线程的start()方法。当线程对象调用start()方法即启动了线程,start()方法创建线程运行的系原创 2022-03-02 21:31:57 · 7951 阅读 · 0 评论 -
适合新手的云服务器配置、白嫖
腾讯云:腾讯云免费试用1个月,点此链接:如下图【腾讯云】云产品限时秒杀,爆款1核2G云服务器,首年74元,点此链接:如下图【腾讯云】DNSPod解析套餐全面升配降价,更高的套餐配置规格,更优的价格方案,全面提升可用性及响应率,专业版限时99元/年!,点此链接………阿里云:新用户注册,免费试用1个月,点此链接:如下图这里因为我已近领取了,所以显示不符合规则新人大优惠,点此链接:如下图代金券领取,点此链接:如下图...原创 2021-09-25 13:08:32 · 424 阅读 · 1 评论 -
键值约束与扩展属性、ER关系图、三大范式、分组查询、多表联查
键值约束与扩展属性,ER关系图,三大范式,分组查询,多表联查键值约束与扩展属性:键值约束:约束表中指定字段的数据必须符合某种规则;种类:非空约束:NOT NULL —— 约束指定字段数据不能为NULL唯一约束:UNIQUE —— 约束指定字段数据不能出现重复主键约束:primary key —— 数据非空且唯一,一个表中只能有一个主键外键约束:foreign key —— 表中指定字段数据受父表数据约束foreign key (字段名) references 主表(列)默认值:DEFAUL原创 2021-08-03 15:03:43 · 463 阅读 · 0 评论 -
MySQL基础(认识、安装、基础语法等)
SQL:结构化查询语言数据库分类:关系型数据库:以一种关系模型(二维表格模型)组织数据的数据库分类:oracle、mysql、sql server、mariadb、sqlite(轻便、直接引入头文件).非关系型数据库:不基于sql实现的数据库分类:redis(后期学习)、memcached、mongodbmysql数据库的安装:安装:yum -install -y mariadb配置:查看配置:mysql -uroot;show variables like ‘%char%’;客户端原创 2021-08-02 16:13:44 · 1933 阅读 · 7 评论 -
四种IO模型‘阻塞IO/非阻塞IO/信号驱动IO/异步IO‘
1. IO过程:等待IO就绪,数据拷贝2、阻塞IO若IO条件不具备,则一直等待流程简单,但是效率低简单图解:3、非阻塞IO若IO条件不具备,则操作直接报错返回 相较于阻塞IO,非阻塞IO对于资源的利用率有所提高,但操作复杂度有所提升,因为这种非阻塞操作通常要循环进行,IO操作不够实时 简单图解: 非阻塞IO的实现:非阻塞的实现:recv/send(fd, buf, len, flag); 其中flag设置为MSG_DONTWAIT设置描述符属性:int fcntl(int原创 2021-07-13 16:27:03 · 446 阅读 · 1 评论 -
linux 头文件 位置
Linux中头文件的目录:两类:内核源码中的头文件,比如驱动中包含的头文件;应用软件中包含的头文件。这两类默认放的位置不同。我们平常写代码用的都是软件中包含的头文件:路径为:/usr/include内核源码的头文件路劲:# 编译 C 文件或 C++ 文件时都会搜索以下五个路径/usr/local/include/usr/lib/gcc/x86_64-linux-gnu/7/include/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed/原创 2021-07-07 12:03:20 · 3138 阅读 · 0 评论 -
HTTP 细到无法直视
全文概要:1、HTTP概念:2、HTTP协议格式:2.0、文字描述:2.0、结构图说明:2.0、举例说明(图):2.1、首行-请求行(请求方法 ,URL(URI),协议版本\r\n)2.1.1、请求方法:——对请求的描述2.1.2、URL:——网址--同一资源定位符--用于定位网络中某个主机上的某个资源2.1.3、协议版本:0.9 ,1.0 ,1.1 ,2.02.2、首行—响应行:协议版本、响应状态码、状态码描述\r\n2.2.1、协议版本(见2.1.3)2.2.2、响应状态码——直观向客户端反馈处理结果2原创 2021-06-09 21:03:51 · 1373 阅读 · 24 评论 -
tcp 通信 看了必须有点东西
大体预览从tcp的流程——接口——代码编写服务端流程(server)(文字说明):客户端流程(client)(文字说明):接口实现;写一个`tcpsocket.hpp`的类,用于封装tcp接口(代码);调用`tcpsocket.hpp`类,写tcp通信程序服务端`tcp_csrv.cpp`(代码);调用`tcpsocket.hpp`类,写tcp通信程序客户端`tcp_cli.cpp`(代码);本质原因(文字说明):解决方案(文字说明):多线程(文字说明):多进程(文字说明):多线程::调用的`tcpsock原创 2021-06-05 18:20:48 · 1060 阅读 · 26 评论 -
udp 通信程序
用c语言写一个服务端udp_srv.c的udp通信;写一个udp的类udpsocket.hpp,封装接口:调用udpsocketchpp类,写udp客户端udp_cli.cpp原创 2021-06-05 16:18:51 · 306 阅读 · 8 评论 -
网络套接字
sip+sport+dip+dport+protocol;—五元组,标识一条通信;每条信息,都会包含五元组;socket 套接字编程:网络通信程序的编写(接口+流程);udp协议编写/tcp协议编写初始:udp协议: 用户数据报协议—特新:无连接、不可靠、面向数据报;应用场景:实时性要求大于安全性要求的场景;—视频传输tcp协议:传输控制协议特性:面向链接、可靠传输,面向字节流;应用场景:安全性要求大于实时性要求的场景;—文件传输在网络通信程序中,通信两端分为:客户端、服务器端;客户原创 2021-06-02 22:00:26 · 432 阅读 · 15 评论 -
线程池 线程安全的单例模式 饿汉方式 懒汉方式
线程池:第一个线程安全任务队列+提前创建好最大数据上限的工作线程;针对大量数据请求处理的场景;好处:1.避免大量线程频繁创建与销毁带来的时间成本;2.任务节点以及线程有上限,避免资源耗尽的风险;核心线程将需要处理的数据,以及数据处理的方法组织成一个任务,放入线程池,线程池只需要取出一个任务节点,通过其中的方法处理节点中的数据;ThreadTask{要处理的数据,数据处理的方法}ThreadPool{创建线程,创建线程安全的任务队列}typedef void(*handler_t)(int原创 2021-05-05 14:46:38 · 762 阅读 · 18 评论 -
linux vim 复制粘贴代码
将光标移动到复制的起始位置,按一下大写V或小写v,(大写V是整行,小写是光标处),然后上下左右将光标移动到复制的末尾,然后按下y,移动到要粘贴的位置,按下大写P或小写p(大写P:光标之前粘贴,小写p光标之后粘贴);总结:光标处起始处——按V/v——移动到复制的末尾处——按y——光标移到想粘贴的地方——按P/p;想要剪切的话,把y换成dd;...原创 2021-04-26 21:55:21 · 1286 阅读 · 1 评论 -
手撕的生产者与消费者模型哪里错了??拜托各位了
各位大佬们,找了一年的错误了,实在找不到了;拜托各位大佬了,,十分感谢//linux 1 #include<iostream> 2 #include<stdio.h> 3 #include<queue> 4 #include<pthread.h> 5 using namespace std; 6 #define MAX_QUEUE 5 7 #define NUM_MEMBER 4 8 class blockQueue{原创 2021-04-23 21:21:38 · 175 阅读 · 2 评论 -
面试重点:死锁 条件变量 生产者与消费 信号量细到恐怖。。。。。
死锁死锁描述的是程序流程无法继续推进的情况——多个线程对锁资源进行争抢获取,但是因为流程推进顺序不当造成互相等待,最终流程无法推进(程序流程因为某种原因卡死无法继续运行);1.死锁四个必要条件:(1). 互斥条件:同一时间只有一个线程/进程可以访问操作;(2). 不可剥夺条件:一个执行流已获得的资源在未使用完之前,不能强行剥夺;(我的锁只有我能解)(3). 请求与保持条件:一个执行流因请求资源阻塞时,对已获得的资源保持不放;(加了A锁请求B锁,B请求不到,A不释放)(4). 环路等待条件原创 2021-04-23 21:06:37 · 1728 阅读 · 19 评论 -
线程安全你不会,你面试,你怎么敢的呀,细到恐怖.......
线程安全概念:多个线程对临界资源的访问是安全的;实现:同步与互斥互斥:通过同一时间对临界资源的唯一访问保证访问操作的安全;同步:通过条件判断使对临界资源的访问更加合理;互斥的实现:互斥锁:本质是一个个0/1技术器,用于标记对临界资源的访问;0——不可访问,1——可访问;互斥锁自身操作是一个原子操作(直接用0与临界资源进行交换,然后判断临界资源可否访问)://linux,打印会出错//多线程打印,判断不及时,多线程进入导致--过多,打印错误#include<s原创 2021-04-19 08:53:50 · 548 阅读 · 3 评论 -
多线程这些都不清楚,你面试?还不赶紧看看?细到恐怖....
并行和并发的区别:1.并发(concurrency):在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。并发是指同一时刻只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上有多个进程被同时执行的效果–宏观上并行,针对单核处理器其中两种并发关系分别是同步和互斥。互斥:进程间相互排斥的使用临界资源的现象,就叫互斥。同步(synchronous):进程之间的关系不是相互排斥临界资源的关系,而是相互依赖的关系。进一步的说明原创 2021-04-19 08:42:34 · 644 阅读 · 7 评论 -
用了这么久的linux,man的1-8部分代表啥?
man,显示程序手册页可执行的文件一般都会提供man(manual),参考手册有8个部分;比如:当我们要查找pthread_create这个函数的使用时:会出现下图:这个(3)就这个函数在man手册的第三部分;那么这个3到底是什么意思哪?可以指定部分有1-8,表示具体部分的解释:1.用户操作的命令(举例ls)2.内核系统调用的程序接口3.c库函数程序接口4.特殊文件5.文件格式6.游戏和娱乐7.其他杂项8.系统管理命令不是所有命令手册都包含以上选项;操作:m...原创 2021-04-14 21:58:40 · 2740 阅读 · 14 评论 -
基础IO(c标准IO接口库)
基础IO(c标准IO接口库)fopen,fread,fwrite,fseek,fclose接口实现方式:(1)FILE* fopen(char* filename,char* mode);filename:文件名mode:文件打开方式——只读、只写、读写、追加写;r :只读——若文件不存在,则打开失败;若存在,直接打开;r+ :读写——若文件不存在,打开失败,若存在,直接打开;w :只写——若文件不存在,则创建新文件,若存在,则清空文件原有内容打开文件;w+ :读写——若文件不存原创 2021-04-07 22:33:27 · 242 阅读 · 0 评论 -
退出进程 替换接口
退出进程:1.main函数中return;2.2.库函数exit;3.系统调用接口_exit;perror:strerror:获取系统错误原因;替换:加载一个新的程序到内存中,更新当前进程的页表映射信息到新的程序上,初始化页表,初始化虚拟地址空间。希望子进程能完成一个新的任务。多进程更加稳定。替换接口:系统调用接口:execve库函数:execl/execlp/execle/execv/execvpl和v:参数赋予方式不同,l是一个一个的赋予,v是一个参数数组p:是原创 2021-03-29 22:44:19 · 134 阅读 · 0 评论 -
虚拟地址空间图解
虚拟地址空间的分配与系统环境有关:下图为linux X86环境*1.保留区(受保护的地址)保留区即为受保护的地址,大小为0~4K,位于虚拟地址空间的最低部分,未赋予物理地址(不会与内存地址相对应,因此其不会放任何内容)。 任何对它的引用都是非法的,用于捕捉使用空指针和小整型值指针引用内存的异常情况。大多数操作系统中,极小****的地址通常都是不允许访问的,如NULL。C语言将无效指针赋值为0也是出于这种考虑,因为0地址上正常情况下不会存放有效的可访问数据。将指针赋值为0,意味着该指转载 2021-03-23 15:43:27 · 1799 阅读 · 0 评论 -
阻塞 非阻塞 进程等待 wait waitpid
进程等待:父进程等待子进程的推出,获取子进程返回值,释放资源防止僵尸进程。操作:pid_t wait(int* status)**status:一个整形空间的地址,接受子进程返回值;返回值:成功返回子进程pid,失败返回-1;等待任意一个子进程退出,如没有退出,一直阻塞等待;阻塞:为了完成某一目的调用某一个功能,不具备完成条件,则一直等待;调用之前有子进程退出,调用时就会立即处理pid_t waitpid(pid_t childpid,int *status,int options原创 2021-03-21 22:22:25 · 948 阅读 · 0 评论 -
页表 段号 页号 分段式 分页式 段页式
‘虚拟地址’如何通过页表获取到‘真实地址’(物理地址)的?分段式内存管理:将地址空间分为多段,(代码段,数据段…),便于编译器进行地址管理;分段式虚拟地址组成:段号+段内的地址偏移量;在系统中有一个段表:一个个段表项(段号,物理内存段起始地址), 用来对应分段式计算物理地址;分页式内存管理:将地址空间分成多个小块(页)实现数据离散式存储,提高内存利用率;分页式虚拟地址组员:页号+页内偏移;在系统中有一个页表(页号,物理内存块起始地址,权限控制,缺页中断位…)段页式内存管理: 将虚原创 2021-03-17 19:50:31 · 1571 阅读 · 0 评论 -
pid_t和int
pid_t pid; //定义一个进程号类型的变量 pid创建进程时经常会用到进程号的类型定义:pid_t。我们都知道这个类型定义实际上就是int型。但是在linux下的c中的头文件中这个定义到底是怎么定义的呢?今天就把以前找这个定义的过程贴出来:1.首先在/usr/include/sys/types.h中有如下定义#include <bits/types.h>…#ifndef __pid_t_definedtypedef __pid_t pid_t;#define __转载 2021-03-15 18:06:24 · 691 阅读 · 4 评论 -
linux上传GitHub
今天编写一份Python基础代码,经过Linux上传到github上,遇到点问题,已经解决。1.首先sudo su 进入root 用户2.ls 检查出当前文件下有什么文件3. cd 进入你将要上传的文件夹下4.git init(在本机上想要创建一个新的git仓库)5.git add -A(这里的-A是指将目标文件的所有文件都添加到git中,若不需要添加所有文件,可将-A换成具体的文件名)6.git commit -m “firstCommit” (“firstCommit” 也可以改转载 2021-02-22 14:42:10 · 170 阅读 · 0 评论 -
linux 基础指令
LINUX指令认识使用XShell远程登录LINUx查看Linux的ipifconfig1.ls[选项][目录文件]对于目录,列出目录下所以子目录与文件。对于文件,列出文件名以及其他信息-a 列出目录下的所有文件,包括以 . 开头的隐含文件。-d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录-i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件-k 以 k 字节的形式表示文件的大小。ls –alk 指定文件-l 列出文件的详细信息。-n原创 2021-02-01 12:30:33 · 200 阅读 · 1 评论 -
操作系统
linux的背景.来源1968年,一些来自通用电器公司、贝尔实验室和麻省理工学院的研究人员开发了一个名叫Multics的特殊操作系统。Multics在多任务文件管理和用户连接中综合了许多新概念。1969-1970年,AT&T的贝尔实验室研究人员Ken Tompson和Dennis Ritchie,在采用很多Multics特点的基础上开发了UNIX系统。它运行在小型机上,满足了系统对科研环境的要求。从产生开始,UNIX就是一个有价值的、高效的、多用户和多任务的操作系统。UNIX从满足个人的设原创 2021-02-01 11:29:28 · 353 阅读 · 0 评论