
Linux
文章平均质量分 82
JDSZGLLL
努力学习编程的小孙
展开
-
volatile、可重入和不可重入函数以及SIGCHILD信号
main函数调用insert函数向一个链表head中插入节点node1,插入操作分为两步,刚做完第一步的 时候,因 为硬件中断使进程切换到内核,再次回用户态之前检查到有信号待处理,于是切换 到sighandler函 数,sighandler也调用insert函数向同一个链表head中插入节点node2,插入操作的 两步都做完之后从 sighandler返回内核态,再次回到用户态就从main函数调用的insert函数中继续 往下执行,先前做第一步 之后被打断,现在继续做完第二步。原创 2023-04-03 17:00:25 · 380 阅读 · 0 评论 -
MySQL:内置函数、复合查询和内外连接
select 函数;原创 2023-08-09 16:19:29 · 540 阅读 · 0 评论 -
MySQL:表的约束和基本查询
表的约束——为了让插入的数据符合预期。表的约束很多,这里主要介绍如下几个: null/not null,default, comment, zerofill,primary key,auto_increment,unique key。原创 2023-08-09 15:28:29 · 742 阅读 · 0 评论 -
高级IO:五种IO模型
阻塞IO: 在内核将数据准备好之前, 系统调用会一直等待. 所有的套接字, 默认都是阻塞方式.原创 2023-08-04 16:47:47 · 360 阅读 · 0 评论 -
网络层:IP协议/Mac协议
主机: 配有IP地址, 但是不进行路由控制的设备;路由器: 即配有IP地址, 又能进行路由控制;节点: 主机和路由器的统 称;IP = 目标网络(前半部分) + 目标主机(后半部分)原创 2023-08-01 11:55:50 · 895 阅读 · 1 评论 -
网络传输层协议:UDP和TCP
端口号(Port)标识了一个主机上进行通信的不同的应用程序;在TCP/IP协议中, 用 "源IP", "源端口号", "目的IP", "目的端口号", "协议号" 这样一个五元组来标识一个通信(可以通过 netstat -n查看);原创 2023-07-27 11:22:32 · 765 阅读 · 0 评论 -
MySQL:库的操作和表的操作(内含MySQL数据类型讲解)
进入数据库的数据目录。原创 2023-06-27 14:06:39 · 892 阅读 · 0 评论 -
MySQL:环境安装和数据库基础
一般文件提供了数据存储能力,但管理能力不足。数据库是在磁盘或内存中以特定结构组织的数据。C(client) MySQL数据库客户端S(server)MySQL数据库服务端MySQL是基于CS模式的网络服务,对外提供一套存储解决方案。原创 2023-06-24 16:11:59 · 266 阅读 · 0 评论 -
网络通信:http协议
虽然我们说, 应用层协议是我们程序猿自己定的. 但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议) 就是其中之一.原创 2023-06-01 17:33:30 · 2701 阅读 · 0 评论 -
网络通信的序列化和反序列化
由于在系统底层,数据的传输形式是简单的字节序列形式传递,即在底层,系统不认识对象,只认识字节序列,而为了达到进程通讯的目的,需要先将数据序列化,而序列化就是将对象转化字节序列的过程。相反地,当字节序列被运到相应的进程的时候,进程为了识别这些数据,就要将其反序列化,即把字节序列转化为对象无论是在进程间通信、本地数据存储又或者是网络数据传输都离不开序列化的支持。而针对不同场景选择合适的序列化方案对于应用的性能有着极大的影响。原创 2023-05-31 15:12:17 · 1289 阅读 · 0 评论 -
tcp套接字的应用(内含守护进程)
fg + 作业号(切到前台) bg + 作业号(启动暂停的作业号)3. 守护进程是脱离终端的,关闭或者重定向以前进程默认打开的文件。setsid: 中间新建一个会话,必须不是作业的组长才能使用。2. 如何让自己不是组长,setsid且创建子进程。ctrl + z将前台引用放到后台(暂停)守护进程,精灵进程的本质是孤儿进程。1. 让调用进程忽略掉异常的信号。jobs 查看作业。原创 2023-05-24 16:48:27 · 830 阅读 · 0 评论 -
UDP通信的一些小应用
想要完成一个命令行解释器,就只需要将translate函数改为miniShall就可以了。原创 2023-05-06 21:12:12 · 130 阅读 · 0 评论 -
Linux:网络套接字
想象一下发qq消息的例子, 有了IP地址能够把消息发送到对方的机器上, 但是还需要有一个其他的标识来区分出, 这个数据要给哪个程序进行解析。为使网络程序具有可移植性,使同样的C代码在大端和小端计算机上编译后都能正常运行,可以调用以下库函数做网络 字节序和主机字节序的转换。因此,网络数据流的地址应这样规定:先发出的数据是低地址,后发出的数据是高地址.ip地址(主机全网唯一性)+ 该主机上的端口号,标识该服务器上进程的唯一性。IP地址 + 端口号能够标识网络上的某一台主机的某一个进程;原创 2023-04-30 19:43:14 · 922 阅读 · 0 评论 -
Linux:网络基础1
所有网络问题,本质都是通信距离变长了,为了尽可能减少通信成本,定制了协议。协议分层的优势:软件设计方面的优势 - 低耦合一般我们的分层依据: 功能比较集中,耦合度比较高的模块-- 一层 , 高内聚每一层都要解决特定的问题!原创 2023-04-30 11:51:25 · 1595 阅读 · 0 评论 -
悲观锁、乐观锁、自旋锁和读写锁
在每次取数据时,总是担心数据会被其他线程修改,所以会在(读锁,写锁,行 锁等),当其他线程想要访问数据时,被阻塞挂起。(互斥锁就是一种悲观锁):每次取数据时候,总是乐观的认为数据不会被其他线程修改,因此。但是在更新数据前, 会判断其他数据在更新前有没有对数据进行修改。。(C++原子操作是基于CAS的乐观锁)原创 2023-04-25 16:46:19 · 519 阅读 · 0 评论 -
Linux线程:互斥锁、条件变量和信号量
生产者和消费者彼此之间不直接通讯,而 通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者 要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。当队列满时,往队列里存放元 素的操作也会被阻塞,直到有元素被从队列中取出(以上的操作都是基于不同的线程来说的,线程在对阻塞队列进程 操作时会被阻塞)大部分情况,线程使用的数据都是局部变量,变量的地址空间在线程栈空间内,这种情况,变量归属单个线程,其他线程无法获得这种变量。原创 2023-04-17 17:24:13 · 465 阅读 · 0 评论 -
Linux线程基础:控制和封装
1. 了解线程概念,理解线程与进程区别与联系。2. 学会线程控制,线程创建,线程终止,线程等待。3. 了解线程分离与线程安全概念。原创 2023-04-11 21:49:55 · 525 阅读 · 0 评论 -
Linux:多级页表
3、合理的对地址空间+页表进行资源划分,我们就可以对一个进程所有的资源进行分类。2、页表决定,进程真正拥有资源的情况。1、地址空间是进程能看到的资源窗口。原创 2023-04-09 21:32:53 · 141 阅读 · 0 评论 -
Linux:进程信号
以下课铃为例:人是能够识别下课铃的(认识 -> 产生行为(下课))1.你为什么能识别下课铃呢?有人教育过你(手段) -- 让你在大脑中记住了对应的下课铃属性或者行为2.当信号到来的时候,我们不一定立马处理这个信号,引号可以随时产生(异步),你可能做着更重要的事情(拖堂)3.信号到来---时间窗口(必须的记住这个信号)---->信号被处理4.产生的动作:默认动作自定义动作忽略动作。原创 2023-03-30 09:29:34 · 808 阅读 · 0 评论 -
Linux:进程间通信
管道是Unix中最古老的进程间通信的形式。我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”管道文件是一个内存级文件(即只存在于内存中,没有对外设IO的过程)。原创 2023-03-03 19:45:50 · 727 阅读 · 0 评论 -
文件基础IO
在我们了解基础文件IO时,我们首先需要接受下列事实:任何语言都有进行文件操作的函数,不管是C/C++还是python、shell都有自己的库函数进行文件操作,但是我们知道文件操作的实质是对磁盘进行操作,这是操作系统做的是,所以不管是什么语言,文件操作都是调用的系统文件操作的接口。 如图可以看出,进程想要管理被打开的文件,在PCB中有指针指向一个结构体——文件描述符表,内部包含一个指针数组指向打开文件的属性结构体,实现对文件的操作。文件描述符(fd)分配规则:从小到大,按照循序寻找最小且没有被占用的fd。原创 2023-02-25 21:21:50 · 1361 阅读 · 4 评论 -
模拟实现一个简单的命令行解释器(shell)
我们通过各种指令来实现对操作系统进行各种操作,这些指令本质上和我们写的可执行程序并没有区别,当然我们也可以实现一个类似于shell的命令行解释器。原创 2023-01-20 21:18:18 · 2271 阅读 · 0 评论 -
Linux基础——进程的概念和控制(操作系统级讲解)
在Linux中描述进程的结构体叫做task_struct。task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。原创 2023-01-09 20:37:25 · 719 阅读 · 0 评论 -
Linux基础——git和gdb的使用
我们在平时维护和上传代码时会用到git,但是这个git具体是什么,往往又说不清楚。其实git其实就是一个版本管理工具,有了这个工具就能方便快捷地查询自己上传代码的不同版本,对每一次上传的改动了如指掌。那gdb又是什么呢?在VS上,我们可以通过鼠标点击来打断点,通过F5,F10和F11来控制程序,实现程序的调试,但是Linux没有图形界面,就不能像VS一样,就只能引入gdb来作为调试工具,对程序进行调试。原创 2022-12-11 14:51:19 · 609 阅读 · 0 评论 -
Linux基础——编译器gcc/g++以及项目自动化构建工具make/Makefile(内含进度条实现)
有了编辑器之后,我们想要把在文件中编写的代码生成可执行程序,就要用到编译器,在Windows系统下,可以通过VS集成开发环境一键编译,在Linux下就要使用到编辑工具——gcc/g++了。然后还要用到项目自动化构建工具,make/makefile.原创 2022-10-28 11:41:23 · 586 阅读 · 0 评论 -
Linux基础——vim编辑器的使用(内含一键vim配置)
今天我们要来讲一下Linux中用到的一款功能强大的编辑器——vim。原创 2022-10-25 11:10:20 · 1281 阅读 · 0 评论 -
Linux基础篇——认识权限以及环境基础开发工具
了解Linux系统内关于权限的知识,学习yum工具,进行软件安装和卸载原创 2022-10-19 11:00:04 · 142 阅读 · 0 评论 -
Linux基础篇——认识指令
Linux下的基本指令原创 2022-09-29 21:04:32 · 774 阅读 · 1 评论