![](https://img-blog.csdnimg.cn/dc27d2faea4246cbba573637e0713e77.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux
文章平均质量分 87
记录Linux学习知识点,本人是一名软工专业的大三学生,学识有限,如发现错误,敬请斧正~
X.Dragon
前PLA队员 在校大学生 C+方向,主修C+、Linux、计算机网络、网络编程、MySQL,分享学习记录,期待大家一起交流和学习...
展开
-
【Linux命令】Linux常见命令介绍(最强超详细版本)
方式 3 3: : t cat > > t c.txt 按 按 c ctrl+c 组合键退出;gzip –dv main.c.gz,或者 bzip2 –dv main.c.bz2。-h:–human-readable,以人们易读的 GB、MB、KB 等格式显示,例如 要显示“/home/user/0718/”目录下的 main.cc 文件的最。则就会将 main.c 压缩成 main.c.gz 或者 main.c.bz2。 >出 重定向输出 、 >>出 添加输出 、 2>错误重定。原创 2023-10-31 08:58:24 · 793 阅读 · 0 评论 -
【高级IO】第一讲(5种IO模型的介绍、select函数介绍、一个简单select服务器)
五种IO模型介绍原创 2023-09-22 15:04:41 · 60 阅读 · 0 评论 -
【计算机网络】第三讲网络相关协议讲解(DNS、NAT、ICMP、总结)
数据链路层数据链路层的作用: 两个设备(同一种数据链路节点)之间进行传递数据以太网是一种技术标准;既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;以太网帧格式理解mac地址理解arp协议理解MTU网络层网络层的作用: 在复杂的网络环境中确定一个合适的路径.理解IP地址, 理解IP地址和MAC地址的区别.理解IP协议格式.了解网段划分方法理解如何解决IP数目不足的问题, 掌握网段划分的两种方案.原创 2023-09-22 11:51:33 · 359 阅读 · 0 评论 -
【网络编程】C++实现网络通信服务器程序||计算机网络课设||Linux系统编程||TCP协议(附源码)
在ServerTcp函数定义定义了一个init函数,用于配置服务器的网络监听套接字,绑定IP地址和端口,并开始监听来自客户端的连接请求。①首先创建套接字:使用 函数创建一个套接字,这里使用的是IPv4()和TCP()协议。如果创建失败,会记录错误信息并退出程序。②绑定地址和端口:创建一个 结构体变量 ,它用于保存服务器的本地地址信息。原创 2023-09-06 08:22:26 · 976 阅读 · 0 评论 -
【网络编程】万字详解||一个简单TCP服务器(TCP、线程池、守护进程)源码+介绍
这段代码实现了一个简单的互斥锁(Mutex)和锁保护(LockGuard)机制,用于在多线程环境中保护共享资源的安全访问。Mutex 类:Mutex 类是一个封装了 pthread 互斥锁的简单类。它的构造函数用于初始化互斥锁,lock() 方法用于获取锁,阻塞其他尝试获取锁的线程,unlock() 方法用于释放锁,允许其他线程获取锁,析构函数用于销毁互斥锁。原创 2023-08-09 15:08:06 · 570 阅读 · 0 评论 -
【网络编程】实现一个简单多线程版本TCP服务器(附源码)
通过监听连接请求,服务端可以在一个循环中接受多个连接,为每个连接创建对应的套接字,从而实现并发处理多个客户端。在网络编程中,字节序问题很重要,因为不同的计算机体系结构可能使用不同的字节序,这可能导致在通信过程中的数据解释错误。accept 函数是在服务器端用于接受客户端连接请求的函数,它在监听套接字上等待客户端的连接,并在有新的连接请求到来时创建一个新的套接字用于与该客户端通信。当服务器的监听套接字接收到一个新的连接请求时,accept 函数会创建一个新的套接字用于与该客户端通信。原创 2023-08-08 13:42:36 · 573 阅读 · 0 评论 -
【网络编程】利用套接字实现一个简单的网络通信(UDP实现聊天室 附上源码)
网络字节序是一种在计算机网络中使用的固定字节顺序,用于在不同计算机体系结构和操作系统之间传递数据。在计算机内部,不同的体系结构(例如x86、ARM、SPARC等)和操作系统(例如Windows、Linux、iOS等)可能使用不同的字节顺序,这可能导致在网络通信中出现问题。为了解决这个问题,网络通信中使用了统一的字节顺序,即网络字节序。网络字节序采用大端字节序(Big-Endian)表示法,其中较高的字节位于较低的内存地址上,较低的字节位于较高的内存地址上。原创 2023-08-07 13:16:52 · 489 阅读 · 0 评论 -
【网络编程】一个基于UDP协议的实例
【代码】【网络编程】一个基于UDP协议的实例。原创 2023-08-05 15:16:24 · 197 阅读 · 0 评论 -
【Linux多线程】设计一个线程池(代码+讲解)
同步机制:lockQueue() 和 unlockQueue() 函数用于对任务队列进行加锁和解锁,haveTask() 函数用于判断任务队列是否为空,waitForTask() 函数用于等待任务,choiceThreadForHandler() 函数用于通知线程有任务可执行。成员变量:isStart_ 用于标记线程池是否已经启动,threadNum_ 表示线程池中线程的数量,taskQueue_ 是任务队列用于保存任务,mutex_ 和 cond_ 是互斥锁和条件变量用于对任务队列进行同步操作。原创 2023-08-03 15:17:22 · 232 阅读 · 0 评论 -
【Linux多线程】一个基于环形队列实现的案例
sem_t 是信号量(Semaphore)的数据类型,用于在多线程或多进程环境中实现线程同步和资源控制。信号量是一个计数器,用来控制对共享资源的访问。它主要有两个基本操作:wait 和 post,也被称为 P 操作和 V 操作。wait 操作用于申请资源并等待资源可用,若资源不可用,则线程或进程进入阻塞状态。post 操作用于释放资源,使得其他线程或进程可以继续执行。原创 2023-08-03 14:50:34 · 188 阅读 · 0 评论 -
【Linux多线程】基于生产消费模型写的一个实例(附源代码+讲解)
在这个类中,提供了两个主要的操作,push()和pop(),分别表示向队列中添加数据和从队列中获取数据。这个阻塞队列可以用于生产者-消费者模型,在多线程编程中,生产者将数据放入队列,消费者从队列中获取数据,由于队列的线程安全性,可以保证数据的一致性。同时,通过条件变量的使用,实现了当队列满或空时,相应的生产者线程或消费者线程会阻塞等待,直到条件满足(即有空间放入数据或有数据可取)时再继续执行。要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。原创 2023-08-02 15:37:47 · 103 阅读 · 0 评论 -
【Linux多线程】环境变量介绍
条件变量是用来等待线程而不是上锁的,条件变量通常和互斥锁一起使用。条件变量之所以要和互斥锁一起使用,主要是因为互斥锁的一个明显的特点就是它只有两种状态:锁定和非锁定,而条件变量可以通过允许线程阻塞和等待另一个线程发送信号来弥补互斥锁的不足,所以互斥锁和条件变量通常一起使用当条件满足的时候,线程通常解锁并等待该条件发生变化,一旦另一个线程修改了环境变量,就会通知相应的环境变量唤醒一个或者多个被这个条件变量阻塞的线程。这些被唤醒的线程将重新上锁,并测试条件是否满足。一般来说条件变量被用于线程间的同步;转载 2023-08-01 14:17:55 · 98 阅读 · 0 评论 -
【Linux多线程】死锁问题介绍
死锁是多线程或多进程编程中的一种常见问题,指的是两个或多个线程(或进程)相互等待对方持有的资源,导致程序无法继续执行下去,进而陷入无限等待的状态。原创 2023-08-01 14:09:08 · 197 阅读 · 0 评论 -
【Linux多线程】线程的互斥 (附抢票案例代码+讲解)
当一个线程或进程进入临界区时,它会尝试获取互斥锁,如果互斥锁没有被其他线程或进程持有,那么该线程或进程将获得互斥锁,并进入临界区执行代码。当线程或进程执行完临界区的代码后,会释放互斥锁,允许其他线程或进程获取互斥锁,进入临界区执行代码。== 临界区是指访问临界资源的代码段或区域 ==,在临界区中,对临界资源的访问必须是原子的,即同一时间只能有一个线程或进程在执行临界区的代码。互斥锁的作用是在多线程环境下保护临界区(共享资源),只允许一个线程访问临界区,其他线程必须等待互斥锁的释放。原创 2023-07-30 15:58:30 · 215 阅读 · 0 评论 -
【Linux多线程】详解线程控制、线程分离
如果不使用 pthread_detach,当一个线程终止时,它的资源将一直保留在系统中,直到其他线程调用 pthread_join 来回收它的资源。具体来说,pthread_detach 函数用于向线程库指示,当目标线程(被调用 pthread_detach 的线程)终止时,其状态和资源可以被系统回收,而不需要其他线程调用 pthread_join 来等待其终止。当一个线程被标记为“可分离”,则在该线程终止时,线程的资源会自动释放,而无需其他线程调用 pthread_join 来等待和回收该线程的资源。原创 2023-07-30 14:59:14 · 175 阅读 · 0 评论 -
【Linux线程】第一章||理解线程概念+创建一个线程(附代码加讲解)
在Linux下,线程是进程的一部分,是可以独立执行的轻量级执行单元。每个进程都至少有一个线程,这个线程称为主线程或主进程。进程可以创建多个线程,这些线程共享进程的资源,包括内存空间、文件描述符等。不同线程之间可以并发执行,共享进程的全局变量和静态变量,从而实现多任务并发执行的效果。原创 2023-07-28 14:41:01 · 95 阅读 · 0 评论 -
【万字详解】Linux进程信号||一文搞定进程信号||附测试代码
在生活中,有很多的例子,例如:红绿灯、旗语、铃声等等,这些东西都是给人传递一种特定信号的,如在交通中,红灯停,绿灯行。Q:我们怎么知道红灯停绿灯行?A:通过学习,了解的!即使我们现在不在道路上,我们也知道这个常识,知道当这个信号出现时我们应该怎么处理,即使当前信号还没出现!原创 2023-07-25 13:00:57 · 218 阅读 · 0 评论 -
Linux--详解管道、匿名管道pipe命名管道fifo(进程通信、代码+解析)
介绍管道知识之前我们先要引入一个概念-----进程通信进程之间具有独立性,需要多进程之间协调来完成一件事,涉及到数据交互,成本会非常的高,比较繁琐,因为进程具有独立性进程独立不是完全独立,在特殊场景之下要进行数据交互👈管道是Unix中最古老的进程间通信的形式。👉 我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”管道是单项通信的,有进口有出口!写快,读慢,写满了不能再写了写慢,读快,管道没有数据的时候,读端必须等待。转载 2023-07-23 12:44:54 · 1352 阅读 · 0 评论 -
Linux——动静态库的制作和使用超详细(实操+代码+原理介绍)
🍏动态库(Dynamic Library)和静态库(Static Library)是在软件开发中创作和使用原创 2023-07-15 16:06:29 · 642 阅读 · 0 评论 -
深入理解Linux文件系统+软硬链接
1️⃣ 分区:大磁盘 → 小空间,化整为零 2️⃣ 格式化:给每个分区写入文件系统所以理论上,我能把这100G的小空间管理好,其他空间就复刻我就好啦,因为硬件都是标品,当然了不同分区也可以写入不同的文件系统boot block 存在于每个分区的开头,备份文件,是与启动相关的,供启动时查找分区。转载 2023-07-14 15:22:14 · 58 阅读 · 0 评论 -
基础IO文件系统
转载自:链接: [【Linux】基础IO(万字详解) —— 系统文件IO | 文件描述符fd | 重定向原理] 仅供学习使用 大家多支持原创(https://blog.csdn.net/qq_42996461/article/details/127811244)转载 2023-07-14 11:33:30 · 38 阅读 · 0 评论 -
Linux——深度解析IO文件流缓冲区问题(原理详解+代码手撕)
缓冲区 (buffer),它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区,显然缓冲区是具有一定大小的重定向到文件导致:刷新策略改变(变成全缓冲)写时拷贝:父子进程各自刷新一次。原创 2023-07-13 13:47:49 · 493 阅读 · 0 评论 -
Linux——系统文件IO(文件操作符 详解+代码)
读文件打印到显示器stdin & stdout & stderrC默认会打开三个输入输出流,分别是stdin, stdout, stderr仔细观察发现,这三个流的类型都是FILE*, fopen返回值类型,文件指针总结打开方式:2.系统文件IO2.1 open函数介绍结果:2.3Q :fd为什么是3?012去哪里了?原创 2023-07-12 13:15:06 · 197 阅读 · 0 评论 -
Linux——进程状态
文章转载自。转载 2023-07-12 12:46:22 · 245 阅读 · 0 评论 -
Linux——创建进程Fork()
fork本质是创建进程,系统多了一个进程,与进程相关的内核数据结构task_struct+进程相关的代码数据,在系统里都多了一份。默认情况下,会继承父进程的代码和数据,内核数据结构task_struct,也会以父进程为模板,初始化为子进程的task_struct。父子进程代码共享,默认情况下,数据也是共享的,但是在修改时,数据各自开辟空间(采用写时拷贝)。原创 2023-07-12 12:36:37 · 329 阅读 · 0 评论 -
冯诺依曼结构体系
冯·诺依曼结构是一种计算机体系结构,也被称为冯·诺依曼体系结构。它是现代计算机体系结构的基础,由冯·诺依曼(John von Neumann)于1945年提出。冯·诺依曼结构以其简洁、通用和灵活的特性成为计算机设计的基石。冯·诺依曼结构的核心思想是将程序指令和数据存储在同一块存储器中,并通过共享的总线进行读取和写入操作。以下是一个生动形象的例子,说明冯·诺依曼结构的核心概念:想象你有一个非常简单的计算机,它由以下几个组件组成:1.存储器(Memory):这是一个大的存储空间,用于存储程序指令和数据。原创 2023-05-09 11:29:10 · 1147 阅读 · 0 评论 -
Linux环境变量认识和理解
例如,要查看进程ID为PID的进程的环境变量,可以使用cat /proc/PID/environ命令。为了方便查看,可以通过管道和grep命令进行筛选,如cat /proc/PID/environ | grep VARIABLE_NAME。例如,echo $PATH将显示PATH环境变量的值。grep命令结合/proc文件系统:在Linux系统中,可以通过读取/proc文件系统中的特定文件来查看进程的环境变量。printenv命令:类似于env命令,printenv也可以用来显示当前环境中的所有环境变量。原创 2023-05-16 12:48:06 · 71 阅读 · 0 评论 -
Linux进程控制(附代码解析)
在Linux中,fork是一个系统调用(syscall),用于创建一个新的进程。它通过复制当前进程(称为父进程)的内存、状态和文件描述符等信息来创建一个完全相同但独立运行的子进程。fork系统调用具有以下特点和用途:创建子进程:fork系统调用被用于创建一个新的子进程,使得父进程和子进程在之后的执行过程中可以独立运行。复制父进程:fork系统调用会将父进程的所有内容(包括内存、变量、文件描述符等)复制到子进程中,使得子进程与父进程初始状态相同。原创 2023-06-02 14:57:19 · 291 阅读 · 0 评论 -
冯诺依曼体系结构理解
冯·诺依曼体系结构(Von Neumann Architecture)是一种计算机体系结构,以数学家冯·诺依曼(John von Neumann)的名字命名。它是一种经典的计算机设计范式,广泛应用于现代计算机系统。冯·诺依曼体系结构的主要特点包括:存储程序:指令和数据以二进制形式存储在计算机的主存储器中。计算机可以根据存储的程序来执行一系列指令,而不需要手动修改硬件电路。指令执行周期:计算机按照顺序执行存储在存储器中的指令。原创 2023-07-12 12:28:48 · 356 阅读 · 0 评论 -
Linux Vim提示:E325: ATTENTION 解决方案
这是由于我们异常退出vim界面 程序异常关闭导致的。原创 2023-07-11 15:05:24 · 2790 阅读 · 3 评论 -
Linux——详解进程替换
转载自仅供学习使用 侵删!转载 2023-07-06 13:19:49 · 311 阅读 · 0 评论 -
进程地址空间理解
在之前的学习中,我们只学习了图中的下半部分(用户空间),当时还并未涉及到操作系统。我们写一段代码来验证一下这张图。//初始化 int g_unval;//未初始化 int main(int argc , char * argv [ ] , char * env [ ]) {// 以main函数为代表,打印代码区 printf("code addr : %p\n" , main);// 初始化数据 printf("val addr : %p\n" , & g_val);转载 2023-05-25 16:35:27 · 183 阅读 · 0 评论 -
深入理解计算机进程(从入门到深究)
课本概念:程序的一个执行实例,正在执行的程序等内核观点:担当分配系统资源(CPU时间,内存)的实体。磁盘里面有大量的可执行程序,要加载进内存,内存里有管理进程的驱动–PCB(process ctrl block 进程控制块),Linux下叫 task_struct进程=可执行程序+该程序对应的内核数据结构。原创 2023-05-09 12:59:32 · 113 阅读 · 0 评论 -
C++静态库与动态库理解、创建、使用(超详细版本)
打开工程“属性面板”è”配置属性”è “C/C++”è” 常规”,在“附加包含目录”属性值中,键入DynamicMath.h 头文件所在目录的路径或浏览至该目录。打开工程“属性面板”è”配置属性”è “C/C++”è” 常规”,在“附加包含目录”属性值中,键入StaticMath.h 头文件所在目录的路径或浏览至该目录。l -l:指定链接时需要的动态库,编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.a或.so来确定库的名称。l -l:指定链接时需要的动态库。转载 2023-04-19 15:19:04 · 2436 阅读 · 1 评论