Linux学习
文章平均质量分 87
·分享Linux学习经验
离芩
大二萌新在读,致力于c++后端开发,欢迎大家来多多交流
展开
-
线程纵横:C++并发编程的深度解析与实践
在C++11之前,涉及到多线程问题,都是和平台相关的,比如windows和linux下各有自己的接口,这使得代码的可移植性比较差。C++11中最重要的特性就是对线程进行支持了,使得C++在并行编程时不需要依赖第三方库,而且在原子操作中还引入了原子类的概念。要使用标准库中的 线程,必须包含< thread >头文件。常见线程函数简介:用于创建和管理的线程对象。通过构造函数启动线程,并将一个可调用对象(如函数、Lambda表达式、函数对象)作为参数传递给线程。返回当前线程的ID。原创 2024-05-14 22:07:52 · 1662 阅读 · 81 评论 -
织梦云端:网络信号原理的艺术解码
在Linux网络编程中,“信号”(Signal)是操作系统用来通知进程某个事件已经发生的一种机制。信号是一种软件中断,它可以在任何时候发送给一个进程,使得该进程可以中断当前的执行,处理该信号,然后再回到原来的执行状态。Linux系统中定义了许多信号,每个信号都有其特定的用途。SIGINT:通常在用户按下Ctrl+C时发出,用于中断程序的执行。SIGCHLD:当一个子进程终止时,父进程会收到这个信号。SIGALRM:定时器超时时发送。SIGPIPE:在尝试写入一个没有读取器的管道或socket时发送。原创 2024-04-29 11:11:45 · 1948 阅读 · 109 评论 -
【Linux高性能服务器编程】两种高性能并发模式剖析——领导者/追随者模式
领导者/追随者模式是多个工作线程轮流获得事件源集合,轮流监听、分发并处理事件的一种模式。在任意时间点,程序都仅有一个领导者线程,它负责监听I/O事件。而其他线程则都是追随者,它们休眠在线程池中等待成为新的领导者。当前的领导者如果检测到IIO事件,首先要从线程池中推选出新的领导者线程,然后处理I/O事件。此时,新的领导者等待新的I/O事件,而原来的领导者则处理I/O 事件,二者实现了并发。原创 2024-04-24 21:43:00 · 1246 阅读 · 7 评论 -
【Linux高性能服务器编程】两种高性能并发模式剖析——半同步/半异步模式
首先,对于I/O模型中的同步和异步,意思是区分内核向应用程序通知的是何种I/O事件(是就绪事件还是完成事件),以及让谁来完成任务(是应用程序还是内核)。而在并发编程中,指程序按照顺序还是需要按照程序执行的需要由系统事件来驱动,常见的系统事件有:中断,信号。如下图:按照同步方式运行的线程称为同步线程,按照异步方式运行的线程称为异步线程。显然,异步线程的执行效率高,实时性强,这是很多嵌入式程序采用的模型。但编写以异步方式执行的程序相对复杂,难于调试和扩展,而且不适合于大量的并发。原创 2024-04-23 22:24:10 · 1081 阅读 · 3 评论 -
【网络编程】Web服务器shttpd源码剖析——CGI支持实现
CGI(Common Gateway Interface,通用网关接口)是一种重要的互联网技术,它允许网页服务器运行外部程序来处理用户请求,并生成动态内容。CGI 是一种标准方法,用于 web 服务器传递用户请求给服务器上的应用程序,并接收应用程序的响应,然后将响应返回给用户。用户请求:用户通过浏览器发送请求给 web 服务器,请求可以是一个普通的页面请求,也可以是一个表单提交。服务器响应:web 服务器接收到请求后,如果请求的是静态内容(如 HTML 文件),服务器直接返回内容。原创 2024-04-20 15:15:51 · 1341 阅读 · 20 评论 -
【网络编程】Web服务器shttpd源码剖析——线程池调度
hello!大家好呀!欢迎大家来到我的网络编程系列之web服务器shttpd源码剖析——线程池调度,在这篇文章中,希望这篇文章能对你有所帮助,大家要是觉得我写的不错的话,那就点点免费的小爱心吧!原创 2024-04-18 21:45:21 · 1246 阅读 · 16 评论 -
【网络编程】如何创建一个自己的并发服务器?
hello!大家好呀!欢迎大家来到我的网络编程系列之如何创建一个自己的并发服务器,在这篇文章中,希望这篇文章能对你有所帮助,大家要是觉得我写的不错的话,那就点点免费的小爱心吧!原创 2024-04-16 23:37:25 · 1389 阅读 · 11 评论 -
【网络编程】Linux网络内核结构以及分布剖析
在Linux内核中,软中断(Soft Interrupt)是一种非硬件中断,它允许内核代码在不需要CPU硬件中断的情况下执行中断处理代码。软中断通常用于执行一些需要立即执行的任务,但不需要立即响应的场合,例如网络数据包的处理、磁盘I/O操作等。原创 2024-04-15 19:52:17 · 1610 阅读 · 51 评论 -
【网络编程】高性能并发服务器源码剖析
hello!大家好呀!欢迎大家来到我的网络编程系列之洪水网络攻击,在这篇文章中,希望这篇文章能对你有所帮助,大家要是觉得我写的不错的话,那就点点免费的小爱心吧!原创 2024-04-14 16:01:54 · 2443 阅读 · 56 评论 -
网络编程探索系列 —— 洪水网络攻击
洪水攻击,也被称为拒绝服务攻击(DoS),是一种旨在通过使网络或系统资源耗尽来阻止用户访问服务的攻击手段。这种攻击通常通过发送大量请求来淹没目标系统,导致合法用户无法访问服务,其中主要利用了网络协议的安全机制或者直接使用十分简单的大量ping资源的方法来对目标机造成影响。原创 2024-04-13 15:25:29 · 2090 阅读 · 47 评论 -
网络编程探索系列之——广播原理剖析
广播是一种网络通信技术,允许数据包(如 IP 数据包)被发送到网络上的所有设备。在广播通信中,数据包不是发送给特定的接收者,而是发送给网络中的所有设备。每个设备都会接收到这个数据包,但只有特定地址的设备会响应。广播通常用于局域网(LAN)中,允许设备之间直接通信,而不需要通过路由器。这种通信方式可以提高网络的效率,因为它避免了数据包在网络中的不必要的转发。原创 2024-04-12 22:13:34 · 2158 阅读 · 14 评论 -
[C++/Linux] UNIX域函数
Unix域套接字(Unix Domain Sockets),也称为本地套接字(Local Sockets),是一种特殊的套接字,它允许在同一台主机上的进程间进行通信。与网络套接字不同,Unix域套接字不经过网络协议栈,因此它们通常比网络套接字更快,并且不需要端口和IP地址。Unix域套接字提供了流式(SOCK_STREAM)和数据报(SOCK_DGRAM)两种通信方式,类似于TCP和UDP。流式套接字提供了可靠的双向字节流通信,而数据报套接字则提供了不可靠的双向数据报通信。原创 2024-04-10 20:02:14 · 1488 阅读 · 4 评论 -
[C++/Linux] UDP编程
UDP(用户数据报协议,User Datagram Protocol)是一种无连接的网络协议,用于在互联网上交换数据。它允许应用程序发送数据报给另一端的应用程序,但不保证数据报能成功到达,也就是说,它提供的是一种不可靠的服务。与TCP(传输控制协议)相比,UDP的优势在于它的简单性和低开销,使得它特别适合于那些对实时性要求高的应用,如视频会议和在线游戏。在编程中,使用UDP进行数据通信涉及到一系列的函数调用。这些函数调用通常通过操作系统提供的网络接口与内核进行交互。原创 2024-04-09 21:49:44 · 1106 阅读 · 1 评论 -
[C++/Linux] 网络I/O处理
I/O处理原创 2024-04-08 22:21:59 · 1944 阅读 · 5 评论 -
[C++/Linux] Linux线程详解
在Linux中,线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。同一进程中的多条线程将共享该进程所拥有的全部资源,但每条线程都有各自的调用栈和程序计数器,能够独立运行。那么什么是并发与并行呢?原创 2024-04-04 17:33:39 · 1700 阅读 · 3 评论 -
Unix消息队列实例
我们创建三个文件,一个recieve.c和pa.c,pb.c 。用recieve.c来监听pa.c和pb.c发送的消息: recieve.c代码:pa.c理解: 在Unix-like系统中,函数用于从一个路径名和一个项目标识符(通常是整数)生成一个key值。这个key值用于进程间通信(IPC),比如消息队列、共享内存和信号量。函数的定义如下:复制是一个指向现有路径名的指针,通常是文件路径。 是一个整数,用于进一步区分不同的key值。重要的是要理解,生成的key值不仅取决于,还取决于。这原创 2024-04-02 10:58:45 · 994 阅读 · 3 评论 -
Unix信号处理
函数是一个用于在指定时间后发送信号的函数。它允许你在程序中设置一个定时器,当定时器计时时间到达后,系统会向当前进程发送一个。函数可以设置特定信号的处理方式,可以是忽略该信号、采用默认的处理方式,或者调用自定义的信号处理函数。这个程序主要演示了信号处理的基本用法,以及父子进程之间对信号处理函数的继承。参数为 0,则之前设置的定时器会被取消,且不会设置新的定时器。函数时,程序会暂停执行两秒钟,然后继续执行后续的代码。函数会取消之前的定时器,并设置新的定时器。,表示定时器的计时时间,单位是秒。原创 2024-03-31 14:03:15 · 2050 阅读 · 3 评论 -
Unix中的进程和线程-2
1.进程对环境变量的操作1.进程对环境变量的操作getenvsetenvunsetenvgetenvsetenvunsetenv在这个程序中,我们首先使用getenv函数来获取 PATH 环境变量的当前值。然后我们使用setenv函数来创建一个新的环境变量 TEST_ENV 并为它设置一个值。接下来,我们再一次使用setenv函数来修改 PATH 环境变量的值。最后,我们使用unsetenv函数来删除我们之前创建的 TEST_ENV 环境变量。我们可以看到,通过调用getenv。原创 2024-03-30 15:04:41 · 1220 阅读 · 2 评论 -
Unix中的进程和线程-1
在Linux中,进程和线程是操作系统进行工作调度的基本单位,它们各自拥有特定的属性和作业环境。进程是指在系统中正在运行的一个应用程序。每个进程间都有各自独立的内存空间,即使是同一个程序的不同实例也不会共享这些信息。比如说,你可以打开多个计算机浏览器,它们都是独立的进程。每个进程至少有一个线程,这个线程被称为主线程。线程是进程中的一个单独的序列流,是进程的实际操作单位。线程在同一进程的上下文中运行,并共享同一进程的命名空间,这意味着它们共享同样的代码段、数据段和开放的文件资源等。原创 2024-03-28 19:44:18 · 1809 阅读 · 6 评论 -
Unix内存映射
更重要的是,每次编辑器对文件的修改,都必须把完整的文件内容重新写回磁盘,以确保数据的一致性,这将会极大地影响程序的性能。通过文件映射,编辑器可以将文件内容直接映射到内存中,将文件视为一个大数组。当修改文件时,只修改了内存中的一小部分,操作系统会负责将这部分数据写回磁盘,而不需要重新写入整个文件。通过将同一个文件映射到不同的进程内存空间中,这些进程就可以通过访问和修改这段共享内存,来交换数据和同步状态。其基本原理是,通过操作系统提供的内存管理设施,将文件的一部分或全部直接映射到进程的地址空间。原创 2024-03-27 19:44:11 · 686 阅读 · 0 评论 -
Unix中仿写cp指令
我们还可以直接将这个可执行文件放入系统指令集中,这样可以代替我们的cp指令。这是一个简单的cp指令仿写,对于初学者来说很友好!原创 2024-03-26 21:38:37 · 514 阅读 · 2 评论 -
Linux基础操作
总结就是在系统访问域名时,需要对其解析为ip地址,先从本地记录查看,然后联网向DNS服务器询问对应ip地址。对于我们手动添加的第三方软件,有些不能自动集成,这需要我们手动集成(在后续会讲到)iostat -x num1 num2 ,num1是刷新间隔;进程是在操作系统种每一个运行的程序,并且会被分配一个独有的进程id。对于ip地址的定义,我就不多说了,大家自己复习计算机网络相关知识。网络监控:sar命令,sar命令其实很复杂,这里就只用来网络监测。1.nmap指令:这个命令查看的是对外开发的端口。原创 2024-03-16 16:21:42 · 1130 阅读 · 3 评论 -
Linux的ping指令连不上外网解决
第一个是当前虚拟机地址,第二个为掩码,第三个为网关,第四个为dns ,如果和我一样,就这样设置,不一样就按你自己设置。点击属性,如果你上面和我改的一样,就按我下面这样设置,如果不同,就按你自己的设置。这个问题真的困扰我了很久,我在电脑前四五个小时,查资料,腰酸背痛,终于解决了。点击NAT设置,记住子网ip,掩码,以及网关,不同可以设置和我一样。整个过程包含了常见的两种问题的解决方案,希望能帮助大家!对于这两种,我都遇到了,我在之间改来改去,终于算是从根源解决。然后在vm虚拟机中点击编辑中的虚拟网络编辑器。原创 2024-03-15 22:53:13 · 588 阅读 · 5 评论 -
Linux入门指令-2
初学linux,就当笔记啦!!原创 2024-03-14 23:27:57 · 400 阅读 · 1 评论 -
Linux基础命令学习-1
test代表任何以test结尾的文件,test*表示以test开头的文件,*test*代表包含test的文件。rm :删除文件/文件夹 rm [-r -f] 参数1 ,参数2.........参数,文件路径,必填,表示要过滤内容的文件路径,可作为管道符输入。-r 选项代表删除文件夹, -f表示强制删除,不会弹出提示。参数,关键字,必填,表示过滤的关键字,建议使用””将关键字包。选项-n,可选,表示在结果中显示匹配的行的行号。语法: wc [-c -m-1 -w] 文件路径。原创 2024-03-13 20:38:41 · 355 阅读 · 0 评论