Linux
文章平均质量分 90
张呱呱_
C/C++领域小白,努力中..
展开
-
[网络]HTTP协议 Cookie与Session
HTTP Cookie(也称为 Web Cookie、浏览器 Cookie 或简称 Cookie)是服务器发送到 用户浏览器并保存在浏览器上的一小块数据,它会在浏览器之后向同一服务器再次发 起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态、记录用户偏好等。HTTP Session 是服务器用来跟踪用户与服务器交互期间用户状态的机制。由于 HTTP 协议是无状态的(每个请求都是独立的),因此服务器需要通过 Session 来记住用户的信息。原创 2024-09-07 08:08:11 · 723 阅读 · 0 评论 -
应用层协议Http
在进行网络通信时,应用层协议一般都是程序员自己写的,但是有一些大佬其实已经定义出了一些现成的应用层协议,例如:HTTP(超文本传输协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)、POP3(邮局协议版本3)、IMAP(Internet邮件访问协议)、DNS(域名系统)、SNMP(简单网络管理协议)、DHCP(动态主机配置协议)等等HTTP 协议是客户端与服务器之间通信的基础。它规定了客户端(通常是浏览器)和服务器之间交换数据(尤其是超文本)的格式和方式。原创 2024-09-04 10:33:02 · 941 阅读 · 0 评论 -
Linux-进程间关系与守护进程
守护进程(Daemon Process)是在Unix和类Unix操作系统(如Linux)中运行的一种特殊类型的进程。它们通常在系统启动时自动启动,并在后台运行,执行一些诸如监控或管理其他进程、系统服务、网络服务等任务。原创 2024-08-20 13:32:58 · 1037 阅读 · 1 评论 -
网络版计算器(理解协议与序列化与反序列化)
Jsoncpp 是一个用于处理 JSON 数据的 C++ 库。它提供了将 JSON 数据序列化为字 符串以及从字符串反序列化为 C++ 数据结构的功能。Jsoncpp 是开源的,广泛用于各 种需要处理 JSON 数据的 C++ 项目中。原创 2024-08-18 17:59:49 · 707 阅读 · 0 评论 -
TCP网络套接字
这里还有一个小细节,子进程会继承父进程的文件描述符表,我们知道每一个客户端会对应一个sockfd,而文件描述符表本质就是一个数组,也是有数量大小的,当客户端的数量比较多了的话文件描述符表可能就会被占满,其次父进程不关心业务执行什么,也就是父进程不关心sockfd,所以每当创建一个子进程建议父进程将sockfd关掉,也建议子进程将listenfd也关掉方式误操作,这样不论有多少个客户端,其对应的文件描述符永远是4。这样,当套接字进行通信时,就可以使用这个指定的地址作为通信的源地址。原创 2024-08-09 18:17:14 · 1334 阅读 · 4 评论 -
UDP网络套接字
其实并不是,在现实生活中,我们通过网络聊天是人与人在聊天,下载软件是人在下载,浏览网页是人在浏览,而我们聊天用的微信、下载用的应用商店、浏览用的浏览器在主机中是不同的进程,所以人在主机中的体现就是一个进程,网络通信的本质就是一个主机的进程将信息发送到另一个主机的进程,即。ps:可靠与不可靠不是两个协议的优缺点而是特点,UDP协议是不可靠的注定它的实现和使用是相对容易的,TCP协议虽然是可靠的但是也注定其实现和使用是相对麻烦的,故两个协议没有好坏之分,在不同的场景下两个协议各有各的优点。原创 2024-08-09 15:58:04 · 1339 阅读 · 0 评论 -
网络基础知识
以太网中,任何时刻,只允许一台机器向网络中发送数据,如果有多台同时发送,会发生数据干扰,我们称之为数据碰撞,没有交换机的情况下,一个以太网就是一个碰撞域,所有发送数据的主机要进行碰撞检测和碰撞避免,如果数据链路层的标准是以太网的话,当一个设备发送数据发生数据碰撞后,该设备就停止发送,让其他设备先发送,所以以太网的处理方式可以认为是一种乐观的处理机制,因为同一时间有两个设备同时发送数据的概率并不高。协议的本质也是一个软件,在设计上为了更好的进行模块化,解耦合,也是被设计成为层状结构的。除了报头,剩下的叫做。原创 2024-08-08 18:32:45 · 1020 阅读 · 0 评论 -
Linux-线程同步(条件变量、POSIX信号量)
初始化信号量参数:pshared:0 表示线程间共享,非零表示进程间共享value:信号量初始值,共享资源个数销毁信号量等待信号量//P()功能:等待信号量,会将信号量的值减 1发布信号量//V()功能:发布信号量,表示资源使用完毕,可以归还资源了。将信号量值加 1。张得帅c/Linux基于BlockQueue的生产消费模型基于环形队列的生产消费模型。原创 2024-07-12 18:29:50 · 1018 阅读 · 3 评论 -
Linux—线程互斥
上述代码是一个多线程购票的代码,由于tickets是定义在主线程的栈空间中的,他可以被所有的线程看到,是一个共享资源,这个代码的初衷是让每个线程参与抢票,当票数为0的时候程序停止,但是我们发现运行结果的票数最后竟然出现了负数,这是怎么回事呢?这个期间是可以进行切换的,因为线程虽然被切换走了,但是并没有释放锁,其他线程想要访问临界资源依旧申请不到锁,只有线程释放锁以后其他线程才有机会访问临界区。:每个线程内部,访问临界资源的代码,就叫做临界区,保护临界资源的本质就是保护临界区。Linux 上提供的这把锁叫。原创 2024-07-10 13:22:11 · 1069 阅读 · 2 评论 -
Linux-多线程
由于我们使用的线程接口都是在线程库中维护的,所以我们想创建一个线程的前提是让线程库加载到内存并映射到地址空间,当我们创建一个线程时,pthread库就会在其内部创建一个结构用来管理这个线程,就像我们使用的文件操作,调用fopen函数会返回一个FILE*的结构体,而FILE结构体就是维护在c标准库中的,而tid就是线程库维护的,用于标识每个线程的唯一性,tid是进程级的内核看不到,是用户级的用来让用户操作。,删除一个进程需要删除进程PCB、地址空间、页表等,而删除一个线程只需要删除对应的PCB即可。原创 2024-07-09 12:59:18 · 977 阅读 · 1 评论 -
Linux-页表如何对物理内存进行映射
接下来我们大概计算一下按上述说法一个进程的页表需要多大的内存,页目录1024*4也就是4Kb,页表中索引的是页框的地址,一个地址空间对应的物理内存有2的20次方个页框,所以只需要20个字节就可以索引到所有的页框,那么页表的每个元素只需要3个字节接可以了,一个页表需要3*1024个字节,一共有1024个页表,所以一共需要的大小为4KB+3M的大小(上述大小是大概计算的并不准确)我们知道通过页表可以将虚拟内存映射到对应的物理内存,而操作系统对于物理内存的管理并不是以字节为单位的,而是将物理内存分为许多大小为。原创 2024-07-04 21:54:24 · 311 阅读 · 2 评论 -
Linux---进程信号(万字详解,建议收藏)
Linux信号万字详解,信号的产生、保存、处理,及阻塞信号,信号的操作集函数、信号捕捉的流程、理解volatile关键字、再次理解进程等待原创 2024-05-29 08:15:00 · 1011 阅读 · 2 评论 -
消息队列与信号量(基本概念及操作接口介绍)
例如,我们将共享内存看做是一份资源,及资源的可用数量为1,当一个进程想要访问该共享内存时,先申请信号量,此时S--,当另一个进程想要访问这个共享内存时,信号量为0,没有可用资源,此时就要等待,直到进程访问完成后释放信号量,等待的进程才可以访问共享内存。信号量要保护临界资源,那它一定要让多个进程可以看到他,及信号量自己本身就是一个共享资源,为了保护信号量自己的安全,信号量的操作(PV)一定是原子的,及要么做要么不做、要么成功要么失败,不会做一半被打断。如果是创建新的信号量集,该参数指定了信号量的数量;原创 2024-05-04 11:20:17 · 1163 阅读 · 1 评论 -
【Linux—进程间通信】共享内存的原理、创建及使用
共享内存是一种计算机编程中的技术,它允许多个进程访问同一块内存区域,以此作为进程间通信(IPC, Inter-Process Communication)的一种方式。这种方式相对于管道、套接字等通信手段,具有更高的效率,因为数据不需要在用户空间和内核空间之间进行复制,也不需要经过序列化和反序列化的复杂过程。特点:高速度:由于省去了数据复制和上下文切换的开销,共享内存提供了非常高的数据交换速度。低延迟:适用于需要快速响应和大数据量传输的场景。同步需求。原创 2024-05-02 13:13:28 · 1718 阅读 · 2 评论 -
Linux-进程间通信(进程间通信介绍、匿名管道原理及代码使用、命名管道原理及代码使用)
数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事( 如进程终止时要通知父进程)。进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另 一个进程的所有陷入和异常,并能够及时知道它的状态改变。原创 2024-04-30 21:26:21 · 857 阅读 · 3 评论 -
【Linux】软硬链接与动静态库(理解软硬链接的特点及使用场景、如何建立动静态库与使用第三方库)
静态库和动态库是计算机程序开发中两种不同的库类型,它们都是预先编译好的二进制代码集合,用于提供可重用的功能模块给其他程序调用。静态库在链接阶段会被完整地加入到最终生成的可执行文件中。当编译器在创建一个程序时,如果程序引用了静态库中的函数或对象,那么静态库中的相关代码会被复制并整合到该程序内部。因此,静态链接后的可执行文件包含了程序运行所需的所有库代码,不需要在运行时依赖外部文件。静态库常见的扩展名有 `.a`(Unix/Linux 系统)或 `.lib`(Windows 系统)。原创 2024-04-20 16:26:30 · 1245 阅读 · 3 评论 -
Linux-文件系统理解(磁盘的物理与逻辑结构、什么是inode、OS如何管理磁盘)
磁盘的物理结构、磁盘的存储结构、了解inode与文件系统原创 2024-04-14 15:28:12 · 1929 阅读 · 5 评论 -
[Linux]基础IO(中)---理解重定向与系统调用dup2的使用、缓冲区的意义
在上述代码中,我们先关闭了下标为1的文件,在操作系统中该文件对应的是标准输出(显示器),而我们打开文件后,会将下标1作为该文件的描述符,printf函数的作用就是向下标为1的文件中写入信息,但是此时下标1对应的不在是标准输出了,对应的是我们打开的文件,但是上层仍认为1号下标对应的就是显示器,所以向1号下标文件写入就相当于向文件写入,而这个现象就称之为。在Linux下,当打开一个文件时,进程会遍历文件描述符表,找到当前没有被使用的 最小的一个下标,作为新的文件描述符。3.全刷新:当缓冲区写满才刷新。原创 2024-04-02 21:28:40 · 870 阅读 · 7 评论 -
[Linux]基础IO(上)--理解文件系统调用、文件描述符、万物皆文件
文件系统调用接口介绍、如何理解文件描述符、理解Linux下万物皆文件、理解语言级别的文件操作本质原创 2024-03-30 08:15:00 · 1499 阅读 · 29 评论 -
进程程序替换
使用fork函数创建子进程,子进程与父进程是共享代码与数据的,此时子进程运行的程序与父进程是相同的(但有可能是不同的分支),如果想让子进程运行自己的独立的程序就需要用到 exec函数执行新的程序。 当一个进程被创建时,操作系统会为其创建进程控制块PCB、地址空间并通过页表将虚拟地址映射到物理内存,而exec系列函数的进程替换原理就是将进程中的代码与数据替换为新的代码和数据,并将页表重新映射,此过程没有创建新的进程,所以exec系列函数调用前后进程pid并未发生改变以exec开头的函数一共有六原创 2024-03-27 09:15:00 · 735 阅读 · 3 评论 -
Linux-进程控制(进程创建、进程终止、进程等待)
在命令行下我们可以通过./ + exe文件来创建一个进程,通过fork函数,我们可以通过代码的形式从一个进程中创建一个进程,新进程为子进程,原进程为父进程,子进程在创建时,会与父进程共享下面的代码与数据,当数据被修改时,会采用写实拷贝的方式保证进程间的独立性。//头文件//函数//返回值#子进程中返回0#父进程返回子进程id#出错返回-1进程调用fork,当控制转移到内核中的fork代码后,内核做:分配新的内存块和内核数据结构给子进程将父进程部分数据结构内容拷贝至子进程。原创 2024-03-25 13:29:28 · 1608 阅读 · 3 评论 -
初识进程的地址空间、页表
当我们在写C语言程序时,比方说要使用堆空间,可以利用malloc函数开辟好,但是可能代码跑了很长时间后才会使用这段空间,那这段时间别的进程就无法利用这段空间了,会造成空间的浪费,有了虚拟地址和页表的概念,当进程需要开辟空间时,操作系统只需要将虚拟地址填入页表,但并不构建映射关系,当进程需要使用这段空间时,操作系统才会在物理内存开辟好空间,再构建映射关系,这样就可以大大提高空间的利用率。g_val时,由于父子进程对g_val映射到相同的物理地址,父进程中的g_val也会随之修改,但是为了满足。原创 2024-03-24 08:15:00 · 1183 阅读 · 6 评论 -
如何理解 Linux 命令行参数与环境变量
在写C语言程序时,main函数是否可以带参数呢?------ 是可以的。原创 2024-03-21 09:00:00 · 1231 阅读 · 19 评论 -
Linux进程优先级
优先级是指定进程获取某种资源的先后顺序cpu资源分配的先后顺序,就是指进程的优先权(priority)。优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用,可以改善系统性能。还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能1.2 Linux下的优先级在Linux操作系统中,进程优先级的信息储存在进程控制块task_struct中,在其内部字段中存储着一个整型值。原创 2024-03-19 20:02:33 · 1146 阅读 · 5 评论 -
Linux调试器-gdb使用
本文介绍了gdb常用的基本指令,防止忘记建议收藏观看原创 2024-02-24 14:59:32 · 667 阅读 · 15 评论 -
[Linux基础开发工具---vim]关于vim的介绍、vim如何配置及vim的基本操作方法
Vim是一个类似于Vi的文本编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面,如多级撤销、多窗口操作、崩溃后也可以恢复、增加了稳定性、关键字自动补全、上下文自动补全等。这篇文章我们重点介绍vim的三种模式(vim不止有三种模式欧,这三种模式只是最常用的命令模式(command mode)底行模式(last line mode)插入模式(insert mode)想要查看当前vim的所有模式可以在底行模式下输入。原创 2024-01-26 09:45:00 · 1883 阅读 · 50 评论 -
Linux权限的基本理解
权限就是通过一部分条件,可以拦截住一部分人,给另一部分人权力访问资源,并且权限不仅和人有关,还和事务的属性有关,比如我们不能在视频软件上打游戏,所以权限和人与事务的属性有关。原创 2023-12-31 09:00:00 · 3826 阅读 · 37 评论 -
[Linux] Linux入门必备的基本指令
ls [选项] [目录或文件]对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。原创 2023-11-28 18:22:01 · 1390 阅读 · 35 评论