Linux
文章平均质量分 91
桀桀桀桀桀桀
专注于C/C++,后续会逐渐更新相关的文章,还会有数据结构/Linux系统等文章。
展开
-
五种IO模型与非阻塞IO
平时我们在使用 read/recv 系统调用接口读取数据的时候,是先从接收缓冲区中读出数据,讲数据读完之后,若还想读,那么就会阻塞,在这个阻塞等待的过程中本质就是在等待数据被发送到接收缓冲区,缓冲区有数据之后进行 IO 就可以读出数据;使用 write/send 系统调用接口发送数据同理,当发送缓冲区满的时候就会阻塞等待,不满的时候就通过 IO 将数据拷贝到发送缓存区。所以对于我们的 IO 操作本质就是等待加上拷贝(IO = 等待 + 拷贝)。原创 2024-09-13 22:30:57 · 1172 阅读 · 0 评论 -
传输层协议UDP
本篇将主要介绍 UDP 协议,介绍了有关 UDP 协议的报头、协议特点、UDP 协议在操作系统中的缓冲区、UDP 协议使用的注意事项,以及有关 UDP 的 Socket 编程程序,同时重点介绍了操作系统对于 UDP 协议报文的管理。 接着介绍了有关端口号的映射。原创 2024-09-06 17:07:39 · 950 阅读 · 0 评论 -
应用层协议HTTP
应用层协议中的 HTTP(超文本传输协议)。在互联网中,HTTP 协议是一个至关重要的一个协议,它定义了客户端与服务器之间如何进行通信,以交换或传输超文本。 本篇介绍了有关 URL 的相关知识,http 的报文格式,http 报头中的对应的方法以及 http 中的状态码。最后还泄漏一份关于 http 的网页代码(若想使用该代码成功的在浏览器中访问,需要将自己的 ip 和端口开放)。原创 2024-09-05 12:08:35 · 1241 阅读 · 0 评论 -
Linux自旋锁和读写锁
在前面的文章中我们已经介绍了有关互斥锁的概念与使用,本篇将开始介绍在 Linux 中的自旋锁和读写锁。这三种锁分别用于在不同的应用场景之中,其中互斥锁最为常用,但是我们需要了解一下其他的锁。 对于自旋锁和读写锁都介绍了其原理以及接口使用,并且给出了样例代码。原创 2024-08-24 10:17:17 · 1704 阅读 · 0 评论 -
应用程自定义协议与序列化反序列化
本篇将主要介绍在应用层中自定义的协议,自定义协议的同时还需要将我们的数据继续序列化和反序列化,所以本篇的重点为序列化、反序列化的原因以及如何自定义协议,接着探讨了关于为什么 tcp 协议可以支持全双工协议。还根据用户自定义协议结合 tcp socket 编写了一份三层结构(应用层、表示层、会话层)的网络计算器代码。原创 2024-08-23 19:19:48 · 1014 阅读 · 0 评论 -
Linux网络基础
从本篇开始将进入介绍 Linux 中的网络知识,本篇是先对网络中的一些基础概念做介绍。其中主要介绍了 OSI 七层协议(TCP/IP 五层协议),以及网络传输的流程,其中主要介绍了局域网传输和广域网(跨网络)传输,其中很重要的一点是关于数据包的封装和分用,最后介绍了关于端口号和 socket,得出了网络间通信的本质是进程间通信。原创 2024-08-21 11:24:26 · 1253 阅读 · 0 评论 -
UDP/TCP --- Socket编程
本篇将使用 Linux 中的系统调用来实现模拟 TCP 和 UDP 的通信过程,其中只对 UDP 和 TCP 进行了简单的介绍,本篇主要实现的是代码,至于 UDP 和 TCP 的详细讲解将会在之后的文章中给出。 本篇给出的 tcp 和 udp 的代码中的 echo 都是测试连接是否成功的代码,之后的代码都是在 echo 代码的基础上修改实现了不同功能的代码。原创 2024-08-19 20:01:04 · 1065 阅读 · 0 评论 -
Linux线程thread详解(线程池)
多线程就可以让我们的代码并行运行起来,本篇从线程的基本概念开始介绍,然后比较了多线程与多进程之间的区别。接着介绍了在 Linux 系统下的线程控制,介绍了在 Linux 系统下使用多线程的函数接口。然后讲解了线程的互斥,需要使用锁互斥,同时揭示了互斥的缺点,然后引入了线程同步,需要使用条件变量来解决。在介绍完条件变量之后,我们又介绍了在多线程中常用的生产消费模型,实现了两种经典的生产消费模型:阻塞队列(使用条件变量和互斥锁完成)和环形队列(使用信号量和互斥锁完成)。同时还介绍了线程安全和可重入以及死锁的概念原创 2024-08-13 09:27:23 · 989 阅读 · 0 评论 -
日志Log程序(C++)
使用 C/C++ 代码实现一个日志程序,便于我们在调试程序的时候,打印出对应的日志信息,同时也可以重定向然后记录我们的日志信息。原创 2024-08-11 21:19:45 · 821 阅读 · 0 评论 -
Linux地址空间详解
本篇通过对物理内存和页表详细的讲解,对 Linux 系统下的地址空间做了深度的剖析。原创 2024-08-02 19:42:02 · 970 阅读 · 0 评论 -
键盘输入数据的过程
其实如上的从硬件中读取数据,硬件发送硬件中断(信号),然后由 CPU 记录,接着让操作系统执行已经设定好的方法,其实和我们在 Linux 系统中的信号体系很类似,因为 Linux 系统中的信号体系,就是模拟中断实现的。当我们在键盘中按下按键的时候,键盘会向我们的 CPU 发送硬件中断(也就是给 CPU 特定的针脚发送信号),该硬件中断。(OS维护的一个函数指针数组)中找到对应读键盘数据的方法,然后软件就可以从键盘中读出数据了。,然后 CPU 内的寄存器就会记录下该中断号,然后会在操作系统中的。原创 2024-07-30 21:56:18 · 204 阅读 · 0 评论 -
Linux中信号体系
本篇中主要讲解关于 Linux 中关于信号的知识。首先先介绍了信号的自定义捕捉和信号的常用表示形式,接着就是本篇的重点:信号的产生、信号的保存以及信号的处理。信号的产生主要讲述了信号的五种产生方式以及探讨了关于为什么大多信号直接终止信号;信号的保存中主要讲述信号在内核中的表示(两个位图和一个函数指针数组),以及位图的操作方法;信号的处理主要讲述了捕捉信号、用户态和内核态以及 Core 与 Term 的区别。原创 2024-07-29 23:34:23 · 882 阅读 · 2 评论 -
Linux中的System V通信标准--共享内存、消息队列以及信号量
关于 System V 标准,一共有三种通信方式,分别为:共享内存、信号量和消息队列三种通信方式。本篇将较为详细的讲解三种通信方式的实现原理,以及介绍在 Linux 系统下调用这三种的通信方式的接口,其中以共享内存为例,较为详细的讲解和用代码实现这种通信方式。 最后我们得出这三种通信方式存在很大的共同点,以及总结了操作系统对这三种通信方式的管理。原创 2024-07-23 20:36:27 · 1256 阅读 · 2 评论 -
Linux中进程间通信--匿名管道和命名管道
本篇将会进入 Linux 进程中进程间通信,本篇简要的介绍了 Linux 中进程为什么需要通信,进程间通信的常用方式。然后详细的介绍了 Linux 进程间的管道通信方式,管道通信分为匿名管道和命名管道,本篇分别介绍了其实现的原理,以及使用 Linux 中的系统调用,用代码实现了这两种通信方式。 还详细的介绍了关于管道通信的五种特征和四种情况。原创 2024-07-19 19:54:19 · 1169 阅读 · 0 评论 -
Linux进程替换 && 自主shell程序
本篇将要讲解有关进程中最后一个知识点——进程替换,其中主要介绍有关进程替换的六个函数,直接从函数层面来理解进程替换(在使用函数的过程中,也会对进行替换进行解释)。本篇原创 2024-06-03 09:49:33 · 1870 阅读 · 0 评论 -
Linux进程控制
本篇将较为全面的介绍的 Linux 中的进程控制,其中主要分为三个模块:fork 创建进程、进程终止以及进程的等待。其中关于进程的终止包含如何终止进程、进程退出的三种状态,以及进程的异常退出。最后讲解了进程的等待方法,其中包括阻塞等待和非阻塞等待。原创 2024-05-27 14:06:25 · 1793 阅读 · 0 评论 -
Linux进程地址空间
本篇首先抛出了为什么同一个地址空间的变量值会不一样的问题,然后就此问题对虚拟地址和写时拷贝进行了简单的介绍,接着又深入地址空间的组织形式,在这里进一步的探讨了虚拟地址,然后又探讨了页表和写时拷贝的组织形式。最后介绍了 Linux 中内核调度队列,在这真正的从底层探讨了进程在 Linux 中的调度形式。原创 2024-05-20 12:44:46 · 1338 阅读 · 0 评论 -
Linux环境变量
本篇将进入到 Linux 中的环境变量。首先我们将会联系 main 函数中的参数来讲解命令行参数,首先先讲解了 main 函数中的两个参数 argc 和 argv,接着介绍了本篇的核心——环境变量,详细的讲解了如何使执行程序的时候,不带路径的方法,介绍了获取环境变量的三种方法,同时得出了 main 函数中的第三个参数:env,最后介绍了 Linux 中的内建命令。最后介绍了 shell 程序中的内建命令。原创 2024-05-13 08:55:49 · 1885 阅读 · 0 评论 -
Linux进程状态与优先级
本篇详细的讲解了 Linux 中进程会出现的各种状态,以及出现这些状态的原因,其中进程的阻塞、挂起和运行就是进程状态的体现。接着科普了一下进程的切换,然后讲解了进程的优先级,以及如何调整进程的优先级。最后对进程的特点进行了总结。原创 2024-05-06 08:49:34 · 2214 阅读 · 4 评论 -
Linux进程基础概念&子进程的创建
有着上一节我们对操作系统和冯诺依曼体系结构的理解,本篇我们便可以开始对 Linux 中的进程开始讲解。在本篇中对进程的基本概念进行了简单的介绍,然后通过对描述进程的 PCB,与 Linux 中的 task_struct 的详细讲解,使得对进程的概念有了一个更加详细的理解。然后接着又介绍了 task_struct 中的内部属性 pid 与 ppid(剩下的 task_ struct 内部属性将会在后面的文章给出),接着还介绍了进程的创建方式和子进程的创建,最后介绍了 proc 查看当前进程信息数据。原创 2024-04-29 14:12:09 · 1700 阅读 · 0 评论 -
Linux操作系统&冯诺依曼结构
从本篇开始,我们将进入 Linux 的进程篇章,但是我们将在进行对进程进行讲解前,我们先需要铺垫一些知识。所以我们将较为详细的讲解计算机中的基础常用体系——冯诺依曼体系,接着讲解有关整个操作系统的知识,先从操作系统开始讲起,然后向操作系统的下层讲解,将接完操作系统的下层之后,最后开始讲解操作系统的上三层,从中我们得出一个结论:操作系统存在的意义:对软硬件进行管理(手段),为用户提供良好(高效、稳定、安全的)的运行环境(目的)。原创 2024-04-22 14:16:53 · 1697 阅读 · 0 评论 -
Linux环境基础开发工具使用——gcc/g++、make/makefile and gdb
本篇将主要介绍三个 Linux 环境基础开发工具,gcc/g++、make/makefile and gdb。其中在介绍 gcc/g++ 的使用时,重点讲解了生成可执行文件的四个步骤:预处理、编译、汇编和编译,然后介绍了 gcc/g++ 的常用指令。介绍 make/makefile 的时候,我们分别介绍了 makefile 文件内部的原理、执行顺序、其中的内置符号以及在 makefile 中可以定义的变量。最后对于调试器 gdb 的使用,详细的介绍了 gdb 中常用的指令。原创 2024-04-01 13:15:34 · 1674 阅读 · 0 评论 -
Linux环境基础开发工具使用——yum and vim
本篇将会介绍平时在Linux中开发常用到的一些工具,其中包括:软件包管理器 — yum,Liunx中的开发工具。具体的介绍了 yum 的相关操作以及 yum 源,同时还介绍了 windows与虚拟机如何进行的关联。然后对Liunx中的开发工具进行了详细的介绍,还详细的介绍了 vim 中的快捷命令集。原创 2024-03-25 14:05:59 · 1820 阅读 · 0 评论 -
Linux文件权限
本篇首先先介绍了Liunx中的shell指令,概述了为什么存在shell,以及shell的作用。接着开始详细介绍本篇的主要内容:权限,其中包括文件的权限和目录的权限。以及围绕权限开展的一些相关知识,如文件的所有者、所属组及其他用户,umask文件掩码,Linux中用户的切换、设置粘滞位、文件权限管理……原创 2024-03-04 09:02:26 · 1918 阅读 · 0 评论 -
Linux常见基本指令
本文将详细的介绍Linux中各常见指令的用法,并且在每个指令都有使用样例。一共有以下指令:1. man指令2.目录基础指令:2.1 pwd指令、2.2 ls指令、2.3cd指令 3.文件创建与删除:3.1 touch指令、3.2mkdir指令、3.3 rmdir 指令 && rm 指令4.文件修改指令:4.1 cp 指令、4.2 mv 指令5.文件查看指令:5.1 cat 指令、5.2 more 指令、5.3 less 指令、5.4 head 和 less 指令;date、cal、find、grep等原创 2024-02-20 22:51:00 · 4055 阅读 · 0 评论