
linux
文章平均质量分 91
码农吃枇杷
这个作者很懒,什么都没留下…
展开
-
高级IO__
Linux 高级IO原创 2025-01-26 21:47:14 · 612 阅读 · 0 评论 -
数据链路层
数据链路层原创 2025-01-20 22:17:24 · 866 阅读 · 0 评论 -
网络层--IP协议
网络层--IP协议原创 2025-01-19 11:57:01 · 769 阅读 · 0 评论 -
传输层--TCP协议
传输层--TCP协议原创 2025-01-14 17:20:42 · 669 阅读 · 0 评论 -
传输层--UDP协议
传输层--UDP协议原创 2025-01-09 18:06:24 · 712 阅读 · 0 评论 -
HTTPS 协议
HTTPS 部分截图来源于B站原创 2025-01-08 22:11:29 · 717 阅读 · 0 评论 -
HTTP 协议
里硬编码html代码不太好,更好的是建一个web根目录,Web 根目录是 Web 服务器用于存放可通过网络访问的文件的基本目录。它是 Web 站点文件层次结构的顶层目录,所有的 Web 资源(如 HTML 文件、CSS 文件、JavaScript 文件、图像等)都存储在这个目录或它的子目录下。当用户在浏览器中输入域名时,计算机需要通过域名系统(DNS)将域名转换为对应的 IP 地址,才能找到相应的服务器并获取网站内容。之前的测试时访问页面的url域名后的路径并没有处理,就算url随便写,也能访问到页面。原创 2024-12-14 17:16:12 · 1003 阅读 · 0 评论 -
自定义协议
自定义协议// 添加报头return ret;// 移除报头 "len\n""a op b\n"???// text可能除了"len\na op b\n"外增加了其它字符,比如"len\na op b\nlen\n..."。这里拿取了一个完整的// 移除这一个完整的报文,防止text越来越大int _a;int _b;char _op;// 构建有效载荷,将成员属性变为 "_a op _b"tmp += _op;*out = tmp;原创 2024-11-22 21:11:38 · 1124 阅读 · 0 评论 -
简单的TCP程序
函数的主要用途是将网络地址(如IPv4或IPv6地址)从它们的二进制表示形式转换为人类可读的点分十进制形式(对于IPv4)或冒号分隔形式(对于IPv6)。因为子进程继承了父进程的进程组ID,而其进程ID是新分配的,两者不可能相等,这样就保证了子进程不是一个进程组的组长。监听套接字通常设置为非阻塞模式,这样服务器可以在等待新的连接请求时继续执行其他任务,如处理已建立的连接。如果调用该函数的进程是一个进程组的组长,则该函数返回出错。状态的套接字(服务器端)接受一个连接请求,并创建一个新的套接字来处理这个连接。原创 2024-11-09 17:46:22 · 1007 阅读 · 0 评论 -
简单的udp程序
当你在一台计算机上设置端口号或其他需要在网络上传输的数值时,你需要确保这些数值是以网络字节序的形式发送出去的。如果你的主机是小端序的,那么直接使用主机上的数值(以主机字节序存储)会导致网络另一端的计算机无法正确解释这些数值,因为它们的字节序是相反的。目标IP地址是接收数据包的设备的IP地址。在网络通信中,数据的字节序是一个重要的考虑因素,因为不同的计算机架构可能使用不同的字节序来存储多字节数据类型。函数时需要注意的是,它不进行错误检查,如果输入的字符串不是有效的 IPv4 地址,它将返回。原创 2024-10-27 15:49:22 · 762 阅读 · 0 评论 -
Linux线程
是进程内的一个执行分支。线程的执行粒度要比进程细之前理解的进程:进程 = 内核数据结构(task_struct)+ 代码和数据什么叫做线程?我们认为,线程操作系统调度的基本单位!重新理解进程?进程是承担分配系统资源的基本实体,即操作系统分配资源,是以进程为单位进行分配的。线程是进程内部的执行流资源通信不仅仅是通信数据,互相协同也是要协同,本质也是通信,信号量首先要被所有的通信进程看到信号量本质是一把计数器,其PV操作是原子的。原创 2024-10-11 16:00:21 · 418 阅读 · 0 评论 -
单例模式和读者写者问题
设计模式(Design Pattern)是软件工程中的一种最佳实践,它是在特定场景下解决特定问题的成熟模板或方案。设计模式是面向对象软件开发过程中经过验证的经验和智慧的结晶,它们提供了一种通用的、可复用的解决方案来解决在软件设计中遇到的常见问题。单例模式(Singleton Pattern)是一种常用的软件设计模式,其核心目的是确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。这种模式在需要控制资源访问、节省系统资源、协调系统中的共享资源时非常有用。原创 2024-10-11 15:58:06 · 1317 阅读 · 0 评论 -
POSIX信号量
通信不仅仅是通信数据,互相协同也是要协同,本质也是通信,信号量首先要被所有的通信进程看到信号量本质是一把计数器,其PV操作是原子的。执行流想访问资源,必须先申请信号量资源,得到信号量之后,才能访问临界资源信号量值1, 0两态的,二元信号量,就是互斥功能申请信号量的本质: 是对临界资源的预订机制。原创 2024-10-07 18:02:14 · 649 阅读 · 0 评论 -
生产消费者模式
由于多个线程都访问了同一个阻塞队列,所以会有并发问题所以这里有种关系,个角色(生产者和消费者),个交易场所(特定结构的内存空间)该模型的优点注意,所以,不要只看到生产者生产数据到队列的过程,当阻塞队列队列满时,生产者在等待队列下等待过程中,是可以做获取数据的工作的。同理,不要只看到消费者从队列中消费数据的过程,当阻塞队列为空时,消费者在等待队列下等待过程中,是可以做数据的加工处理动作的。这样,这两个或者多个线程就了,在多生产和多消费体现明显,少量的线程在等待,大量的线程在获取数据和加工数据。原创 2024-10-04 16:33:11 · 1374 阅读 · 0 评论 -
死锁和Linux线程同步
一个锁,也可以产生死锁问题,比如一个线程申请完锁后,又申请锁,此时他就会带着锁阻塞,其它线程也因为得不到锁而阻塞。虽然16行直接让该线程去等待队列等待了。但实际上大部分情况都是因为临界资源不就绪,进而线程去等待。这时,线程就不会一个一个被唤醒,而是Thread-0到Thread-4一下全部被唤醒,打印出来。由于需要判断临界资源是否就绪,也是访问临界资源,所以需要在加锁之后,这样才能保证。,从而有效避免饥饿问题。,如果用静态函数则不需要。原创 2024-09-26 23:41:27 · 853 阅读 · 0 评论 -
Linux 线程互斥
交换的本质:线程把内存中的数据(共享),交换到CPU的寄存器中。而线程的上下文是线程独有的,这样该线程就持有了一个锁。,即使是多处理器平台,访问内存的总线周期也有先后,一个处理器上的交换指令执行时另一个处理器的交换指令只能等待总线周期。可以切换,因为在线程被切出去的时候,是持有锁被切走的,线程不在期间,其它被线程不能访问临界资源,会一直被阻塞,直到。这样,就保证了该线程在执行临界区的时候,对其它线程是原子的。这样,我们的代码中就不需要关心烦人和易忘的加锁和解锁,只要定义一个临时的。对象,就可以自动完成。原创 2024-09-22 20:26:07 · 1221 阅读 · 0 评论 -
Linux 线程控制
注意这里是独立,并不是私有,其它线程想访问还是可以的,比如主线程想访问Thread-2的x值。以这个为例子,如果一个计算任务很大,比如1-100000,就可以拆分,让不同的线程执行不同的范围,最后主线程再将子线程的结果进行汇总。可以看到,打印出来的tid的值与LWP的值完全不一样,这是因为tid是给用户使用的的,而LWP是给OS使用的。对于Linux目前实现的NPTL实现而言,pthread_t类型的线程ID,joinable和分离是冲突的,一个线程不能既是joinable又是分离的。原创 2024-09-19 19:00:05 · 998 阅读 · 0 评论 -
Linux线程概念
是进程内的一个执行分支。线程的执行粒度要比进程细之前理解的进程:进程 = 内核数据结构(task_struct)+ 代码和数据什么叫做线程?我们认为,线程操作系统调度的基本单位!重新理解进程?进程是承担分配系统资源的基本实体,即操作系统分配资源,是以进程为单位进行分配的。线程是进程内部的执行流资源。原创 2024-09-10 22:02:22 · 1046 阅读 · 0 评论 -
信号的捕捉处理
举例如下: 用户程序写了SIGQUIT信号的处理函数sighandler。当前正在执行main函数,这时**发生中断或异常(也可能是系统调用)**切换到内核态。在中断处理完毕后要返回用户态的main函数之前检查到有信号SIGQUIT递达。内核决定返回用户态后不是恢复main函数的上下文继续执行,而是执行sighandler函 数,原创 2024-09-06 21:24:29 · 652 阅读 · 0 评论 -
信号的保存
sigset_t类型对于每种信号用一个bit表示“有效”或“无效”状态,至于这个类型内部如何存储这些bit则依赖于系统实现,从使用者的角度是不必关心的,使用者只需要调用以下函数来操作sigset_t变量,而不应该也不需要对它的内部数据做任何解释,比如用printf直接打印sigset_t变量是没有意义的。,在阻塞信号集中“有效”和“无效”的含义是该信号是否被阻塞,而在未决信号集中“有效”和“无效”的含义是该信号是否处于未决状态。现在需要屏蔽某一信号,接着给进程发该信号,观察pending表。原创 2024-09-01 17:48:25 · 828 阅读 · 0 评论 -
信号的产生
进程上下文切换发生在CPU从执行一个进程切换到执行另一个进程时。上下文切换涉及。原创 2024-08-26 22:20:52 · 836 阅读 · 0 评论 -
进程间通信
管道是Unix中最古老的进程间通信的形式我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”管道实际就是一个内存级别的文件,具体见2.2通信不仅仅是通信数据,互相协同也是要协同,本质也是通信,信号量首先要被所有的通信进程看到信号量本质是一把计数器,PV操作,原子的。执行流申请资源,必须先申请信号量资源,得到信号量之后,才能访问临界资源信号量值1,0两态的,二元信号量,就是互斥功能申请信号量的本质: 是对临界资源的预订机制。原创 2024-08-20 18:20:22 · 1160 阅读 · 0 评论 -
信号入门学习
Ctrl-C产生的信号只能发给前台进程。一个命令后面加个&可以放到后台运行, 这样Shell不必等待进程结束就可以接受新的命令, 启动新的进程。Shell可以同时运行一个前台进程和任意多个后台进程, 只有前台进程才能接到像Ctrl-C这种控制键产生的信号。前台进程在运行过程中用户随时可能按下Ctrl-C而产生一个信号, 也就是说该进程的用户空间代码执行到任何地方都有可能收到SIGINT信号而终止, 所以信号的产生相对于我们自己的代码运行来说是异步(Asynchronous)的。原创 2024-08-16 15:05:18 · 781 阅读 · 0 评论 -
System V共享内存
共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。原创 2024-08-09 18:55:27 · 716 阅读 · 0 评论 -
使用命名管道的通信程序, 加入了日志系统
【代码】使用命名管道的通信程序, 加入了日志系统。原创 2024-07-28 17:08:40 · 289 阅读 · 0 评论 -
使用匿名管道实现一个进程池
因为我们看上面的图可以知道, 当我们只关闭一个fd时, 其实写端并没有全部关闭, 还有好多子进程指向该管道的写端, 子进程不会break, 依然会阻塞等待。这样,一个管道就会有多个写端(随着子进程数量的增多而增加), 这不是我们想要的。解决方案1: 由于最后一个子进程只有一个写端, 所以我们可以倒着close。已将N设置为2, 所以只跑了2个任务就退出了。更改为下面的代码后, 程序退出时就会卡住。中的代码, 确保每一个子进程只有一个写端。上面的代码有点小小的问题, 看下面的图。解决方案2: 非阻塞等待。原创 2024-07-27 13:16:28 · 309 阅读 · 0 评论 -
Linux文件
程序的执行是基于虚拟地址空间的,由。虽然1号fd和2号fd都对应的显示器文件,但是他们两个是不同的,如同认为,同一个显示器文件,被打开了两次,所以log.txt里只有1号fd的内容,而显示器上还是2号fd内容的数据。我们知道,动态库在进程运行的时候,是要被加载的(静态库没有), 且常见的动态库是被所有程序动态链接的,都要使用, 所以动态库也叫共享库.于是我们可以得到一个结论,实际上,0,1,2分别是stdin,stdout,stderro,其中stdin,stdout,stderro是FILE* 类型的,原创 2024-06-18 11:15:05 · 444 阅读 · 0 评论 -
linux进程控制
c语言提供了一共有6个execl函数关于函数命名规则的理解l(list) : 表示参数采用列表v(vector) : 参数用数组p(path) : 有p自动搜索环境变量PATHe(env) : 表示自己维护环境变量。原创 2024-04-22 20:56:00 · 746 阅读 · 0 评论 -
进程地址空间
看task_struct的源码,可以看到有一个指针,其中mm_struct就是地址空间,里面有各个区域的划分所以地址空间就是一种内核数据结构......原创 2024-02-14 20:38:07 · 1407 阅读 · 0 评论 -
Linux工具_vim,make和Makefile, yum,git,gdb
三种模式:命令模式(默认打开的模式),编辑/插入模式,底行模式。原创 2023-10-18 20:23:54 · 68 阅读 · 1 评论 -
进程概念和环境变量
进程概念和环境变量原创 2024-01-29 20:12:03 · 1976 阅读 · 0 评论