Linux
文章平均质量分 89
Linux
皮蛋的小世界
这个作者很懒,什么都没留下…
展开
-
【Linux】应用层协议:HTTP
在之前的文章中我们实现了一个网络版本的计算器,在那个计算器中揉合了协议定制以及序列化反序列化的内容,我们当时也自己定制了一套协议标准,比如请求和响应的格式应该是什么?如何读到一个完整的报文?支持的运算符有什么?等等我们都有自己的标准。那么有没有其他大佬针对应用层的某些使用场景,已经提前给我们写好了协议软件呢?有,这个协议就是HTTP协议,我们当时的协议仅仅是针对计算场景所设计的,而HTTP协议主要是针对web场景所设计的。原创 2024-04-13 10:05:37 · 2293 阅读 · 0 评论 -
【Linux】协议定制+序列化和反序列化
通过微信聊天的例子,我们知道了,协议其实就是结构化数据,是客户端和服务端都知道的一种结构化数据,所以需要创建Request和result两个结构上图所示代码是Request,包含两个操作数x和y,以及操作符op,运算表达式的形式如1+1。网络请求Request是由客户端发送的,但是网络端也必须要知道Request中的内容,如x就表示第一个操作数y就表示第二个操作数,op表示计算的类型。Request就是客户端和服务端之间的一个协议。原创 2024-04-06 21:27:39 · 1674 阅读 · 0 评论 -
【Linux】TCP网络套接字编程+守护进程
在代码中使用非阻塞式等待是一个非常不好用的做法,这会让服务器的工作主线偏离,因为如果要使用非阻塞式等待,则势必得通过轮询的方式来检测子进程的状态,那服务器就需要一直询问子进程是否退出,但我服务器的核心工作主线是接收客户端的请求并建立连接进行网络通信的啊,一旦非阻塞等待,服务器的性能就一定会下降,因为需要一直做不必要的工作:比如询问子进程状态,况且waitpid还是系统调用,每次循环还要陷入内核,所以非阻塞式等待是一个非常不好的方案,不要用他。自成一个会话的进程就被叫做守护进程,也叫做精灵进程。原创 2024-03-31 14:12:08 · 1372 阅读 · 0 评论 -
UDP网络套接字编程
但需要注意的是可靠和不可靠都是中性词,并不是说不可靠是贬义词,针对不同的常见适合不同的传输层协议,例如银行转账时一定是要用TCP协议的,数据的传输必须是稳定可靠的,但某些网络广告推送就比较适合用UDP,因为稳定可靠一定是有代价的,在代码处理上一定是更为繁琐复杂的,维护和编码的成本一定是比较高的。协议谈完之后,需要面临的第一个问题就是网络字节序的问题,因为我们知道一般企业级的服务器一般都是大端字节序,我们用户级的笔记本都是小端,不同的主机使用的大小端都是不同的,这该怎么统一 一下呢?原创 2024-03-27 21:38:32 · 1421 阅读 · 0 评论 -
Linux网络基础
假设现在你要去上大学了,但是没有手机,而且家里也只有一个座机,为了节省电话费,你在走之前和父母做了个约定:当家里的座机响一声,说明你很好,不用它们担心。当家里的座机响两声,说明你没钱了,需要服务给你通过信用社或者邮寄打钱。当家里的座机响三声,说明你有其他事情,需要你父母接起电话来和你交流。计算机之间的传输媒介是光信号和电信号,通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息,。比如收到1表示对方开始发送数据,这一位之后的内容就是对方要发送的数据。原创 2024-03-24 10:17:24 · 637 阅读 · 0 评论 -
【Linux】多线程 --- 同步+POSIX信号量+基于环形队列的生产者消费者模型
只要对临界资源整体加锁,就默认现场会对这个临界资源整体使用,但是实际情况可能存在:一份临界资源,划分为多个不同的区域,而且运行多个线程同时访问不同的区域。原创 2024-03-20 15:02:26 · 603 阅读 · 0 评论 -
【线程】封装 | 安全 | 互斥
所以只要对临界资源进行加锁后,临界资源就变得安全了,因为无论什么线程想要访问临界资源,都必须以原子性的方式访问完,这样的话,就不会出现在访问一半的时候,线程被切换下去了,其他线程被切换上来继续访问临界资源了,而是说如果持有锁的线程被切换下去了,这个线程会抱着他申请到的锁被切换下去,此时其他线程如果被切换上来,想要访问临界资源,那也没用,因为你没有锁啊!反过来说,这不就是原子性吗?你现在加锁之后就会变成串行执行了,那当前持有锁的线程被切换下去时,其他被调度上来的线程是无法继续执行任务的,效率自然就会底一些。原创 2024-03-10 16:30:59 · 984 阅读 · 0 评论 -
【Linux】线程概念|线程理解|线程控制
`线程就是进程内部的一个执行流,线程在进程内运行,线程在进程的地址空间内运行,拥有该进程的一部分资源。`这句话一说可能老铁们直接蒙蔽,线程就线程嘛,怎么还在进程里面运行呢?还在地址空间内运行?而且拥有进程的一部分资源,这都是什么鬼?如何看待线程在地址空间内运行呢?实际进程就像一个封闭的屋子,线程就是在屋子里面的人,而地址空间就是一个个的窗户,屋子外面就是进程对应的代码和数据,一个屋子里面当然可以有多个人,而且每个人都可以挑选一个窗户看看外面的世界。原创 2024-03-03 15:29:39 · 1090 阅读 · 0 评论 -
【Linux】进程信号 --- 信号的产生 保存 捕捉递达
在这里先介绍下面介绍一个接口叫做signal,它可以用来捕捉对应的信号,让进程在递达处理信号时不再遵循默认动作,而是按照我们所设定的函数进行递达处理,这个自定义的方法函数就是handler,signal的第二个参数其实就是接收返回值为void参数为int的函数的函数指针,所以在使用handler时我们需要传信号编号和处理该信号编号时所遵循的自定义方法的函数名即可。值得注意的是,我们的感官灵敏度和CPU的灵敏度是不在同一个level的,我们直觉感受到进程是立马处理该信号的,原创 2024-02-27 21:11:21 · 1076 阅读 · 0 评论 -
【Linux】进程间通信——共享内存
共享内存是由IPC为进程创建的一个特殊的地址范围,它将出现在该进程的地址空间中。其他进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc()分配的内存一样。在运行的时候发现报错了,说我们没有权限,再查看共享内存,发现确实是创建了,但是共享内存的权限是0,也就是我们谁都不能访问。假设我们指定4097字节大小的共享内存,但是在内存中实际开辟的共享内存是2*4KB的。通过两个进程的页表,将内存中的内存块映射到两个进程的进程地址空间中。原创 2024-02-18 22:31:59 · 953 阅读 · 0 评论 -
进程间通信——管道
进程间通信简称IPC(Interprocess communication),进程间通信就是在不同进程之间传播或交换信息。原创 2024-02-16 14:11:48 · 590 阅读 · 0 评论 -
Linux-动静态库
在实践中,我们一定会使用别人的库(不限于C、C++的库),在实践中,我们会使用成熟、被广泛使用的第三方库,而不会花费很多时间自己造轮子,为了能更好地使用库,就要在学习阶段了解其本质。预处理: 头文件展开、去注释、宏替换、条件编译等,生成.i文件编译: 词法分析、语法分析、语义分析、符号汇总等,检查无误后将代码翻译成汇编指令,生成.s文件汇编: 将汇编指令转换成二进制指令,生成.o文件链接: 将生成的各个.o文件进行链接,生成可执行程序(Windows:.exe,Linux:.out)原创 2024-01-28 17:41:40 · 696 阅读 · 0 评论 -
Linux中的软链接与硬链接
相当于创建了源文件的副本,不会随着源文件的删除而消失,会随着源文件内容的更改而更改;硬连接指通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在 Linux 中,多个文件名指向同一索引节点是存在的。原创 2024-01-27 19:48:05 · 416 阅读 · 0 评论 -
Linux-进程替换
我们之前所写的程序,子进程都是在执行父进程代码的一部分,而要想让子进程执行全新的代码,就需要进行进程程序替换。原创 2023-11-22 18:22:52 · 196 阅读 · 0 评论 -
【Linux】进程控制
它从已存在的进程中创建一个新进程,新进程为子进程,原进程为父进程。输出型参数,获取子进程退出状态,不关心则可以设置成为NULL。给子进程返回 0, 给父进程返回自进程的pid。成功返回被等待进程pid,失败返回-1。原创 2023-11-08 09:17:50 · 81 阅读 · 0 评论 -
环境变量【使用命令行参数引出环境变量】
环境变量我们在编写C/C++代码的时候,在链接的时候,从来不知道我们所链接的动态静态库(后面学)在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。还有其他用途等后面学完了常见的环境变量就能够理解了,环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性命令行启动的进程都是shell/bash的子进程,子进程的命令参数和环境变量是父进程通过bash传递给我们的,原创 2023-10-19 00:31:06 · 249 阅读 · 0 评论 -
Linux中调试工具GDB(安装到入门)
使用Makefile自动化构建工具进行代码的预处理、编译、汇编、链接、清理工作。next(n):单步执行程序,但是遇到函数时会直接跳过函数,不进入函数。step(s):单步执行程序,但遇到函数会进入函数。continue:继续执行程序,直到遇到断点或结束。我们先使用vim创建一个源文件。命令自动化编译代码生成。原创 2023-09-16 17:16:34 · 674 阅读 · 0 评论 -
Linux中文件目录权限、粘滞位以及vim的基本使用
基本上 vim 共分为三种模式,命令模式(Command Mode)、输入模式(Insert Mode)和底行模式(Command-Line Mode)原创 2023-09-07 16:12:30 · 94 阅读 · 0 评论 -
Linux基本指令操作 +【权限的理解】
Linux ls(英文全拼: list directory contents)命令用于显示指定工作目录下之内容(列出目前工作目录所含的文件及子目录)。原创 2023-07-28 20:52:56 · 53 阅读 · 0 评论