
Linux学习
文章平均质量分 88
Au&ust
这个作者很懒,什么都没留下…
展开
-
Linux:网络协议socket
我们之前学的通信是本地进程间通信,如果我们想在网络间通信的话,就需要用到二者的ip地址,分别被称为源IP地址和目的IP地址,被存入ip数据包中,其次我们还需要遵循一些通信协议。TCP协议:传输层协议,有连接,可靠传输,面向字节流(无明确边界的字节序列),难UDP协议:传输层协议,无连接,不可靠传输,面向数据流(以数据包为单位),简单网络通信的本质也是进程间通信,你怎么知道你要和哪个进程通信?原创 2024-11-05 01:03:31 · 1737 阅读 · 0 评论 -
Linux:线程安全的单例模式
设计模式听上去是个很高贵的名词,其实就是是一套 多数人知晓、被反复使用、经过分类编目的、代码设计经验的总结,简称:对于编程比较典的场景的解决方案。原创 2024-10-31 17:33:26 · 547 阅读 · 0 评论 -
Linux:线程同步
我们之前提到的线程互斥和线程竞态都算线程安全问题。原创 2024-10-27 00:43:53 · 990 阅读 · 0 评论 -
linux:线程id及线程互斥
线程的tid不像进程,那不是他真正的id,也不是内核的lwp,而是由pthread库维护的一个唯一值给用户提供的线程ID,不是内核中的lwp,而是pthread库维护的一个唯一值库内部也要承担对线程的管理哦,这里报的错是说我的pthread_t的类型可能不匹配,我传回的是pthread_t类型,但是在打印的时候不兼容,可能会被识别为指针对象当然,也能正常运行tid在这里就是一个地址这是Linux系统下的一个线程库。原创 2024-10-24 01:10:47 · 456 阅读 · 1 评论 -
Linux:线程
OS进行内存管理,是以内存块为单位管理的,一个块默认是4kb,一个块里有八个扇区系统和磁盘进行IO的基本单位都是4kb,页(虚拟)是系统的最小单位,块是磁盘的最小单位4kb也可以被称为页框/页帧,OS对内存的管理工作的基本单位也是4kb拷贝(立即拷贝)的时候也是把所有的页框拷贝过去,尽管并不是所有数据都是立即用到,但是这样可以防止在复制的时候发生缺页中断,但是会占用内存(空间换时间)int flag;//是否被占用,是否是脏页,是否被锁定int mode;...原创 2024-10-17 04:26:44 · 1052 阅读 · 0 评论 -
Linux:信号保存与处理
使用kill -l命令查看信号:信号量和信号确实一点关系没有信号是操作系统发出的进程与进程之间的通知于中断,是进程之间时间异步通知的一种方式先了解同步通信:同步通信是一种比特同步通信技术,要求发收双方具有同频同相的同步时钟信号,只需在传送报文的最前面附加特定的同步字符,使发收双方,此后便在同步时钟的控制下逐位发送/接收。优点是效率高,缺点是硬件要求高什么叫异步通信:异步通信是指发送方在向接收方发送数据的时候可以有任意的时间间隔,没有严格的时序要求,而接收方需要一直存在,来接收数据。原创 2024-10-11 22:15:24 · 991 阅读 · 0 评论 -
Linux:进程间通信之信号量
system V的进程间通信除了共享内存,还有消息队列和信号量IPC(进程间通信的简称)原创 2024-10-03 03:13:29 · 1139 阅读 · 2 评论 -
Linux:进程间通信之共享内存
我们无论使用命名管道还是匿名管道,都是在文件层面上实现的通信,实际上还有基于系统层面的system v标准的进程间通信方式。因为操作系统不相信用户,所以用户使用的时候只能通过调用的方式system v提供的主流方式有三个:1.共享内存 2.消息队列(有些落伍)3.信号量前两个以传送数据为目的,第三个以实现进程间同步后者互斥为目的。原创 2024-09-26 17:08:27 · 956 阅读 · 0 评论 -
Linux:进程间通信之命名管道
我们说匿名管道只能用于父子进程这样的关系通信,那么陌生进程怎么通信?我们之前说父子进程能通信的最关键的地方就在于子进程复制了一份父进程的files_struct,从而通过文件的inode映射同一份文件来通信;而陌生的进程他们怎么看见同一份文件?通过什么叫文件内核缓冲区?来先看看一个朴素的通信:一个进程把数据写到磁盘上的一个文件,另一个进程从磁盘中读取来完成通信。原创 2024-09-24 16:10:16 · 722 阅读 · 0 评论 -
Linux:进程间通信之匿名管道
我们之前使用的“|”就是管道样例我们从cat这个命令中获得的数据,写在管道里,然后wc -l再从管道中读取,就是一个管道通信的流程这是我们的管道函数上面的代码也是一个管道的应用,如果你输入1234567890,输出如下:现在详细学一下。原创 2024-09-11 21:44:27 · 978 阅读 · 1 评论 -
Linux:软硬连接和动静态库
一般ll一下,最左边一列就是文件类型:怎么创建链接文件:来试试:这叫软连接,软连接相当于Windows下的快捷方式,直接指向原文件的绝对路径;删除软连接不影响原文件什么是硬链接?创建硬链接硬链接在Linux下相当于备份了一份对应文件我们可以查看他们的inode来看他们的本质区别:可以发现软连接的inode和原文件的inode是不一样的,但是硬链接的inode和原文件的inode是一样的硬链接是通过文件的inode来引用原文件,软连接是通过文件的文件名来引用文件为什么硬链接的inode和原文件的i原创 2024-09-08 20:26:57 · 1087 阅读 · 0 评论 -
Linux:手搓shell
这个整合上面三个函数的接口中使用了snprintf(),平常我们打印字符串到显示器上使用的是printf(),根据我们之前学习的缓存区的概念,snprintf其实就是把数据输入到缓存区内,sprintf函数也可以,但ssnprintf函数更安全。我们在输入指令时,指令是有选项和目标文件的,例如:ls的常用选项有ls -a, ls -l,我们发现命令本身和选项之间是有空格的,并且内核在拿到我们输入的指令时,需要先查找指令,再查找选项。我们不能输入的命令替代我们的这个shell的进程,不然就被覆盖了。原创 2024-09-03 18:49:00 · 1031 阅读 · 0 评论 -
Linux:基础IO
C语言是怎样进行文件操作的?对文件的读写需要用到 fopen、fread、fwrite 等系统底层函数,而用户进程每调用一次系统函数都要从切换到,等执行完毕后再返回用户态,这种切换要花费一定时间成本(对于高并发程序而言,这种状态的切换会影响到程序性能)。fread是将文件的数据读到缓冲区里是自己设定的缓冲区是要读取数据的大小,char就是1,int就是4是要读取的个数是文件指针是实际从文件中读取的基本单元个数feof用检测流上的文件结束符:如果遇到文件正常结束,函数返回值为非零值;原创 2024-08-27 03:52:17 · 963 阅读 · 0 评论 -
在Linux下搭建go环境
保存后执行source ~/.bashrc,更新一下。如果能够显示正确的版本号则证明配置成功。原创 2024-08-21 02:48:41 · 784 阅读 · 1 评论 -
Linux:进程替换
我们的可执行程序,在运行起来的时候就上一个进程一个进程就会有他的内核数据结构+代码和数据把一个已经成型的进程的代码和数据替换掉,这就叫进程替换也就是可以通过系统调用把当前进程替换位我们需要的进程那么替换后,会创建一个新进程吗?不会,只是在旧进程的壳子执行新进程;替换进程后,之前的代码不会执行,因为已经被替换了。原创 2024-08-20 06:26:09 · 855 阅读 · 0 评论 -
Linux:进程控制
任何子进程在退出的情况下,一般必须要被父进程进行等待如果进程在退出时,父进程不管他的儿子,自己先退出,那子进程就会变成Z状态(僵尸状态),发生内存泄露。内存一旦变成僵尸状态,连kill都停不了他,因为谁也没有办法杀死一个已经死去的进程所以父进程为什么等待:1.父进程通过等待,解决子进程退出的僵尸问题,回收系统资源(一定要考虑的)2.获取子进程的退出信息知道子进程是什么原因退出的(可选功能)原创 2024-08-19 03:48:32 · 960 阅读 · 0 评论 -
linux:进程优先级、环境变量、地址空间
什么叫进程优先级?进程优先级是指进程获取某些资源的先后顺序上文中的task_struct,也叫进程控制块(PCB),本质上是结构体,我们的优先级就被写在结构体里面(内部字段)在Linux下,进程的优先级是用数字表示的。数字越小,优先级越高。原创 2024-08-18 05:16:01 · 1100 阅读 · 0 评论 -
Linux下的进程调度队列
我们在进程那一篇讲到了操作系统时间片轮换调度的概念。那么Linux下具体是怎么调度的?原创 2024-08-14 03:40:39 · 474 阅读 · 0 评论 -
Linux:进程
先了解一下这篇的基础知识还有这篇ok我们来说进程进程是什么?在Windows下我们按下Esc+Ctrl+Shift召唤任务管理器,查看Windows下的进程我们的进程也是由操作系统管理的,操作系统对进程的管理也是先描述再组织。每一个进程创建时都会有一个对应的struct PCB。它们本身都存在磁盘里,当你需要时,它们会从磁盘加载到内存里。什么叫PCB?PCB(process control block)进程控制块,简单来说是一个结构体,但是是操作系统来管理进程的一个结构体。原创 2024-08-13 14:32:41 · 834 阅读 · 0 评论 -
操作系统简述
操作系统是计算机中最基础的软件,它运行于内核模式,管理所有,执行。剩下的软件运行于用户模式。每次开机,其实就是我们的操作系统在启动。广义:操作系统内核+操作系统外壳周边程序(给用户提供使用操作系统的方式)狭义:操作系统的内核操作系统既然能管理所有硬件,就可以访问所有硬件,而每一种硬件的特性又不同。如果由操作系统直接访问硬件,则一旦硬件发生变化,操作系统就要响应的做出改变,对操作系统的影响很大。所以增加了操作系统与硬件层中的。原创 2024-08-12 21:09:45 · 676 阅读 · 0 评论 -
Linux组件:gdb
我们在写代码的时候,有时候需要跟进程序的运行改正错误或者找到隐藏的错误,这叫我们在vs等集成开发环境调试都很方便,比如按快捷键F5直接调试,F10逐过程调试--不进函数,F11逐语句调试--进函数,F9创建断点在Linux下我们同样可以完成对代码的调试:使用gdb程序也是有版本的Debug模式是开发模式,可被调试;Release模式是发布模式,不可被调试。首先使用makefile生成一个debug文件:这两种模式有什么区别?原创 2024-08-12 18:04:55 · 960 阅读 · 0 评论 -
冯诺依曼体系
在冯诺依曼体系提出之前,在计算机中是以硬件的形式存在的。我们的电子数字计算机ENIAC由门电路组成(实现逻辑运算的单元电路称为门电路,是一种具体的元件)组成一个物理意义上很庞大的计算机。操作这台庞然大物需要通过旋钮、开关和接插线不同的位置来表示所要执行的程序,一旦需要修改程序功能,就要重新组装电路板,因此在ENIAC上设置一段程序往往需要花费大量的时间(从硬件改变)如果频繁的设置不同的程序会导致机器在很大一部分时间内都处于程序设计状态而无法运行,实用性能大打折扣。原创 2024-08-11 17:18:33 · 801 阅读 · 0 评论 -
linux小组件:git
git是版本控制器(去中心化的分布式系统)可以快速高效地处理从小型到大型的各种项目。易于学习,占地面积小,性能极快。它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。什么叫版本控制器?我们经常看到苦逼的设计师在设计了多个方案被甲方挑剔熬夜该设计,最后甲方说:还是第一版做的好。这就很让人崩溃了。我们程序员也是如此的苦逼,可能改来改去bug越来越多,不如第一版。版本控制就是管理你的每次代码的改动,加上日志,可以更方便我们卖命。原创 2024-08-09 01:33:36 · 553 阅读 · 0 评论 -
Linux小组件:makefile
我们在Windows下编程时使用vs这种集成开发环境,里面什么编译运行调试清理等等服务都被一连串打包好了。在Linux下怎么实现呢?使用我们伟大的!是Linux下的一个工具,通过文本编辑器对文件内容编辑来操作该工具。平常我们创建一个C语言文件,我们需要编辑它,然后编译,生成可执行文件,然后如果生成的结果错了我们还要重新编辑C语言文件,生成一个新的可执行文件等等,如果我们的工程同时有很多个C语言项目,那不是有很多重复的步骤吗?我们用vim在一个文件里把我们需要的指令啊全部写进去,变成一个指令集。原创 2024-08-07 00:05:54 · 1336 阅读 · 0 评论 -
Linux小组件:gcc
在计算机语言发展过程,人们一直都在用二进制编程。就像纸带八音盒一样,在纸带上打孔,有孔就是1,没孔就是0后来有了汇编语言, 面向机器的语言设计,他只是将机器语言做了简单编译,所以并没有根本上解决机器语言的特定性后来发明了C语言,更适合两脚兽使用的语言,但是机器又看不懂,于是就需要。原创 2024-08-02 10:33:49 · 808 阅读 · 0 评论 -
Linux小组件:vim
vim是Linux系统下的文本编辑器在Windows下我们可以使用VS啊Goland啊这种编辑、编译、调试都有的软件,叫集成开发环境(IDE)在Linux下,vim是编辑器,gcc、g++来编译,,gdb来调试。原创 2024-07-31 13:56:47 · 701 阅读 · 0 评论 -
Linux小组件:yum
我们将yum称为包管理器下载、依赖关系、安装、卸载四种问题。如果你在手机上下载一个软件,只需要打开手机应用商城,点击下载安装,就好了。而在Linux下则需要------a:源码安装(把源代码拿来自己编译,但是很麻烦。不一定能在你系统下编译过去,而且我们刚刚说的依赖问题也无法解决)------b:rpm安装包(编译好压缩好的安装包,相当于tgz、zip这种压缩包,不同的环境呢又有不同的安装版本,大佬把源代码放在各种环境下编译后放出来的压缩包,相当于源码安装的进阶版)原创 2024-07-30 22:30:32 · 1023 阅读 · 0 评论 -
Linux下的文件
设备文件在Linux下一切皆文件嘛,那些代表了显示器的文件、代表了磁盘的文件这些就叫设备文件,设备文件就是用来代表物理设备的。多数物理设备是用来进行输出或输入的,比如显示器啊键盘。在Linux系统下,其存在的主要意义是沟通用户和内核。换句话说,用户空间的应用程序要想使用驱动程序提供的服务,需要经过设备文件来达成。Linux系统所有的设备文件都位于/dev目录下。块设备文件是以块为单位进行读写的。一块通常包含多个字节,例如512字节或4096字节等。块设备的读写通常比字符设备。原创 2024-07-29 23:09:10 · 617 阅读 · 0 评论 -
关于Linux权限
体现在Linux上就是比的权力大,普通用户的权力相对而言就被限制住了ᐖ。原创 2024-07-28 16:25:15 · 873 阅读 · 0 评论 -
Linux指令学习
zhizhi类unixLinux的文件层级关系用‘/’表示(windows用‘\’表示)Linux的文件根目录叫‘/’,也就是斜杠,所以所有的文件开头都是‘/’路径具有唯一性,在系统层面标识唯一一个文件命令行:就是那个黑框框命令:对Linux内核的小咒语命令本身+关于对应命令的可选选项(非必填)+命令参数/指向的对象(非必填)原创 2024-07-25 23:41:21 · 744 阅读 · 1 评论