自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 Linux网络:使用TCP实现网络通信(服务端)

本文介绍了TCP网络编程的实现,重点对比了TCP与UDP的差异。主要内容包括:1)TCP服务端初始化,通过socket创建面向字节流的套接字,使用bind绑定IP和端口,listen进入监听状态;2)建立连接时通过accept获取客户端信息,返回用于通信的新套接字;3)特别说明IP地址转换函数inet_ntop相比UDP中使用的inet_ntoa具有更好的线程安全性。TCP作为面向连接的协议,在通信前需要建立连接,服务端需持续监听客户端请求,这是与UDP无连接模式的主要区别。

2025-10-14 19:44:18 1176 53

原创 Linux网络:使用UDP实现网络通信(服务端&&客户端)

本文深入探讨了使用UDP实现网络通信的服务端和客户端实现细节。在服务端部分,重点介绍了recvfrom和sendto这两个面向数据报的核心接口,解释了输出型参数的作用及网络接口的统一抽象化特性。客户端部分则阐述了套接字创建、隐式绑定机制以及服务端信息获取方式。文章还讨论了IP地址绑定策略(推荐绑定0.0.0.0)和端口号选择原则(建议使用1024以上端口),并通过netstat命令验证服务端运行状态。特别指出云服务器不能直接绑定公网IP的特点,以及客户端端口由系统自动分配的实现机制。

2025-09-26 21:03:42 2407 73

原创 Linux网络:使用UDP实现网络通信(网络套接字的创建&&绑定)

本文介绍了UDP网络编程的基本原理和实现步骤。首先对比了TCP和UDP协议的特点,UDP无连接、不可靠但简单高效。接着讲解了UDP套接字的创建和绑定过程,包括socket()和bind()函数的使用,以及struct sockaddr_in结构体的参数设置。重点说明了IP地址和端口号的网络字节序转换,通过inet_addr()和htons()函数实现。最后展示了UdpServer类的初步实现框架,包括构造函数、初始化方法和成员变量定义。文章为后续UDP网络通信开发提供了基础指导。

2025-09-24 20:19:20 1547 54

原创 Linux网络:socket网络套接字

本文深入探讨网络通信基础与套接字原理。第一部分补充网络基础知识,解析以太网通信机制(通过MAC地址识别)、局域网数据封装/分用过程,以及跨网络通信中路由器的关键作用,区分IP地址与MAC地址功能差异。第二部分聚焦网络套接字,阐明端口号标识网络进程的唯一性,对比其与进程PID的区别,解答端口绑定规则,并强调网络字节序统一采用大端格式。全文通过问答形式系统梳理网络通信的核心概念,为理解网络协议栈底层逻辑提供清晰框架。

2025-09-19 20:45:22 1593 71

原创 Linux网络:网络基础

本文主要探讨了网络协议分层结构及其与操作系统的关系,并分析了网络传输的基本流程。首先解释了协议分层的必要性,包括降低耦合度、便于维护等优点。然后介绍了OSI七层模型和TCP/IP五层模型,分别说明各层的功能。接着阐述了网络协议栈与操作系统的关联,指出网络通信本质是贯穿协议栈的过程,需通过系统调用接口访问硬件资源。最后详细描述了数据封装和解包的过程,强调各层协议需要具备分离报头与有效载荷的能力,并确定上层交付协议。文章总结了网络通信是不断封装和解包的过程,为理解网络协议提供了基础框架。

2025-09-17 11:53:35 8926 64

原创 Linux网络:初识网络

本文介绍了Linux下网络基础知识的开端,重点探讨了网络发展历程和协议概念。网络从独立模式逐步发展为局域网、广域网,实现远距离数据传输。协议是网络通信的约定规则,通过分层解决不同问题(如应用层处理数据、传输层解决丢失问题等)。协议表现为结构体形式的报头,与数据组成报文。这些基础概念为后续深入学习网络原理奠定重要基础。文章以快递包裹类比网络协议,形象说明了协议在网络传输中的作用。

2025-09-12 21:00:41 5672 57

原创 Linux:多线程---深入生产消费模型&&环形队列生产消费模型

本文深入探讨了生产者消费者模型及其高效性原理,指出生产者可以在获取数据的同时进行生产,消费者也能在处理数据时并行消费,从而最大化利用空闲时间。通过分析条件变量误唤醒问题,提出使用while循环替代if判断的解决方案。文章详细介绍了POSIX信号量的概念和接口函数,并基于环形队列实现了生产者消费者模型。该模型通过维护空间信号量和数据信号量,确保生产者和消费者在队列空/满时互斥访问,在不空不满时并发执行。代码实现中采用先申请信号量再加锁的方案,进一步提升了并发效率。

2025-07-19 15:44:36 1705 50

原创 Linux:多线程---同步&&生产者消费者模型

文章摘要: 本章深入探讨线程同步机制,重点介绍了条件变量的实现原理和使用方法。通过VIP自习室的类比,阐述了条件变量如何配合互斥锁解决线程调度问题。文章分析了代码中常见的线程安全问题,如共享资源访问冲突和数据竞争。随后引入生产者消费者模型,解释其通过"超市"缓存区实现生产消费解耦的原理,并指出模型中的三类线程关系:生产者间互斥、消费者间互斥、生产消费间互斥与同步。最后通过代码示例展示了条件变量的实际应用,包括线程等待、唤醒机制以及临界资源状态判断的注意事项。

2025-07-11 14:39:04 2788 64

原创 Linux:多线程---深入互斥&&浅谈同步

本文摘要: 本章探讨线程同步与互斥的必要性及实现方式。通过多线程抢票模型演示,分析共享资源(ticket变量)在多线程并发访问时出现数据不一致(如票数为负)的原因:线程切换导致非原子操作(ticket--)被中断,引发上下文数据冲突。为解决该问题,引入互斥锁机制(pthread_mutex_t),保证任一时刻仅有一个线程访问临界资源。示例代码改进为锁版本,通过pthread_mutex_lock/unlock控制临界区,确保线程安全。此外补充了线程分离(pthread_detach)的作用——自动回收不关心

2025-07-05 14:03:37 2283 66

原创 Linux:多线程---线程控制(线程创建&&线程等待&&线程终止)

本文介绍了线程控制相关内容,包括线程创建、等待和终止的实现方法。通过pthread_create函数创建线程时,参数包括线程ID、属性、执行函数和参数;线程等待使用pthread_join获取返回值;终止线程可通过return或pthread_exit实现。文章深入分析了原生线程库(如Linux的NPTL)的工作原理,指出线程控制块(TCB)存储在共享区,并通过clone系统调用实现轻量级进程。此外,还讨论了线程局部存储(__thread修饰符)和C++11线程库与原生库的关系。线程异常会导致整个进程终止,

2025-06-11 12:17:20 2634 81

原创 Linux:多线程---初识线程

本文摘要:Linux系统通过轻量级进程实现多线程机制,线程是进程内的执行分支,共享同一地址空间资源。Linux内核未明确定义线程,而是复用进程数据结构(task_struct)进行模拟。线程相比进程具有轻量化优势(创建/切换成本低),但也存在健壮性降低等缺点。线程共享进程数据,但拥有独立栈和上下文。文章详细解析了虚拟地址转换机制,并介绍了pthread线程库的使用方法(如pthread_create),强调Linux中线程本质是轻量级进程(LWP)。最后总结了线程的应用场景:提升CPU密集型程序效率和改善I

2025-05-26 10:57:21 3962 74

原创 Linux:再谈进程地址空间

本章深入探讨了进程地址空间的相关内容。首先分析了程序编译后的逻辑地址与加载到内存后的虚拟地址转换机制,解释了动态库采用相对编址(-fPIC)的原因。其次从信号处理角度阐述了用户页表和内核页表的区别,指出内核空间对所有进程是共享的。最后通过32位地址转换示例,详细说明了虚拟地址到物理地址的映射过程,并指出线程资源分配本质上是地址空间范围的划分。这些内容从不同维度完善了对进程地址空间的理解。

2025-05-24 13:08:27 2257 60

原创 Linux:进程信号---信号的保存与处理

本章深入探讨了信号的保存与处理机制,重点介绍了信号的状态管理、用户态与内核态的转换、信号处理的底层逻辑以及可重入函数的概念。信号的状态分为未决、递达和阻塞,内核通过位图管理信号的接收与处理。信号的处理通常发生在进程从内核态返回用户态时,操作系统会在内核态与用户态之间进行切换,确保信号的安全处理。此外,信号的处理可能涉及用户自定义函数,内核会在执行这些函数时进行状态转换。可重入函数的设计确保了在信号处理过程中不会出现数据竞争或状态不一致的问题。通过理解这些机制,可以更好地掌握信号处理的底层原理,提升程序的稳定

2025-05-21 13:59:55 1990 54

原创 Linux:进程信号---信号的概念与产生

本文介绍了进程信号的基本概念及其产生方式。信号是操作系统与进程之间的一种通信机制,常见的信号包括键盘组合键(如Ctrl+c)、kill命令、系统调用(如kill、raise、abort函数)、硬件异常和软件条件等。文章从硬件角度解释了信号的识别过程,特别是键盘输入如何通过硬件中断转化为信号。此外,还介绍了core dump功能,它能够在进程异常时将内存信息转储到磁盘,便于事后调试。通过本文,读者可以初步了解信号的作用、产生方式及其在操作系统中的处理机制。

2025-05-20 17:35:17 2046 50

原创 Linux:进程间通信---消息队列&&信号量

本章深入探讨了System V进程间通信的两种方式:消息队列和信号量。消息队列通过允许不同进程向内核发送带类型的数据块实现通信,其系统接口包括创建、修改、发送和接收数据等功能。信号量则是一个计数器,用于管理对共享资源的访问,确保资源的互斥使用。本章还讨论了进程间通信的内核数据结构设计,包括IPC资源的管理机制。最后,本章强调了信号量在进程间通信中的重要性,尽管它不直接传输数据,但通过资源管理实现进程间的协同。

2025-05-10 13:48:28 2864 75

原创 Linux:进程间通信---命名管道&&共享内存

类似于与open中的位图参数,表示,如何创建,如何获取概念。是一个共享内存标识符(该返回值和文件描述符并不能类比)是创建的共享内存的大小(问题一),单位是字节。

2025-05-06 16:36:45 2184 39

原创 Linux:进程间通信---匿名管道

进程间通信:两个或者多个进程实现数据层面的交互,因为进程独立性的存在,导致进程通信的成本比较高。本篇文章从进程间通信的定义出发,由浅入深,从理论到原理解析,从解析到实例分析,最后再到运用的场景,我们不仅知道了进程间通信的本质就是不同进程间看到同一份资源,还知道了管道的系统调用和管道的使用,通过总结四种情况和五中特征的方式了解深入了解了管道的使用情况!!!

2025-04-25 17:50:21 5610 47

原创 Linux:基础IO---动静态库

动态库和静态库动态库因为是共享库,能有效节省资源(磁盘空间、内存空间、网络空间)【优点】,动态库一但缺失,会导致很多程序无法进行【缺点】静态库,不依赖于库,程序可以独立运行【优点】,体积大,比较消耗资源【缺点】,如果非要静态连接,可以加-static。

2025-04-19 16:59:30 4806 39

原创 Linux:基础IO---软硬链接&&动静态库前置知识

想要知道什么是软硬链接,我们先看软硬链接是如何创建的!建立硬链接:ln + [文件名]建立软连接: ln -s + [文件名]创建软连接后,我们发现他具有独立的inode,与被其链接的文件的inode和软连接的inode不一样。所以,软连接是一个独立的文件,因为他具有独立的inode创建硬链接后,该硬链接的inode与被其链接的文件的inode一样。所以,硬链接不是一个独立的文件,因为他没有独立的inode。

2025-04-13 17:33:20 1599 34

原创 Linux:基础IO---inode

当我们要删除一个文件时,操作系统会拿到该文件的inode去找他inode Table中对应的属性,通过属性中存放数据的数据块的下标,将对应的Block Bitmap的位置置“0”,然后在将该inode对应inode Bitmap的位置置“0”,就将该文件删除了,数据块中的内容不用去删除,很麻烦,效率也不高。当我们要查找一个文件,就要通过他的inode找到他在inode Table中对应的属性,从而找到该文件的相关内容,查找该文件的内容,就去访问该文件的数据块,查找该文件的权限,就去访问该文件的权限等**

2025-04-06 20:13:22 1328 24

原创 Linux:基础IO---缓冲区

通过上面五个实例,我们知道了一件事,C语言调用的接口和系统调用的接口区别很大,C语言调用的接口如果没有及时刷新缓冲区就会被close刷掉,或者被拷贝到子进程中,而系统调用的接口则不同,没有被close刷掉,而且是立即打印,没有被子进程拷贝!!!调用C语言接口进行的打印,要先放到缓冲区中,这个缓冲区一定不在操作系统内部!!!不是操作系统级别的缓冲区!!!C语言他会给我们提供一个缓冲区,C接口的调用都会放在该用户级的缓冲区中。

2025-03-28 15:28:54 1004 16

原创 Linux:基础IO---文件描述符

文件分为程序文件和数据文件文件名 == 文件路径+文件名主干+文件后缀数据文件:文本文件二进制文件流:我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输⼊输出操作各不相同,为了方便程序员对各种设备进行方便的操作,我们抽象出了流的概念,我们可以把流想象成流淌着字符的河。C程序针对文件、画面、键盘等的数据输⼊输出操作都是通过流操作的。⼀般情况下,我们要想向流里写数据,或者从流中读取数据,都是要打开流,然后操作。

2025-03-22 20:58:06 924 15

原创 Linux:深入了解进程---进程控制(进程替换&&自制简易版shell)

1.2 进程替换的原理1.3 多进程版------验证各种程序替换接口其中的test.cpp的内容如下:(其中该代码编译后的可执行文件为test)2.自制简易版shell—myshell2.1 交互问题,如何获取命令行?2.2 子串分割问题,解析命令行2.3 strtok()函数2.4 普通命令的执行2.5 指令的判断(内建命令和普通命令)&&内建命令的特殊处理1. 内建命令:cd2. 内建命令:export3. 内建命令:echo4. ls的特殊处理总结

2025-03-15 21:08:24 1051 14

原创 Linux:深入了解进程---进程控制(进程终止&&进程等待)

【代码】Linux:深入了解进程---进程控制(进程终止&&进程等待)

2025-03-09 18:08:25 1168 16

原创 Linux:深入了解进程---进程地址空间

对于一个程序,我们要知道该程序的一些变量都存储在哪里!如图,我们知道一个程序中有一个空间,用来存放不同的变量,其中有栈区、堆区、全局数据区、字符常量区和代码区。(其中,栈空间变量地址向下增长,堆空间变量地址向上增长)

2025-03-01 20:18:02 971 7

原创 Linux:进程优先级和进程切换

本篇文章讲述了我对进程优先级了解,从并发入手,用运行时每个进程的时间片和进程切换所结合的轮转调度算法来讲解了寄存器对进程切换的作用,以及进程切换的内容。提高效率,进程的高频数据会放入寄存器中,cpu内的寄存器里面保存的是。现在让我徐徐道来其中的几个名称的含义是什么!cpu资源分配的先后顺序。

2025-02-22 21:26:33 779 10

原创 Linux:进程的状态

并发执行的程序在执行过程中分配和管理资源的基本单位。[2]一个进程的生命周期可以划分为一组状态,这些状态刻画了整个进程。进程状态即体现一个进程的生命状态。对于不同状态下的进程,操作系统会进行区分对待,从而更好的管理进程!!!

2025-02-08 08:00:00 1078 9

原创 Linux:进程与进程的概念

一个已经加载到内存中的程序或者正在运行的程序。

2025-02-01 04:31:41 1210 13

原创 Linux:进程与冯诺依曼体系结构

输入设备和输出设备与CPU直接交换数据,假设输入设备和输出设备的数据处理速度是微妙级别,CPU的数据处理速度是纳秒级别,期间差了10的6次方,输入设备输入花很长时间才能输入的数据,CPU一下子就搞定了,这会导致CPU的利用率非常低,为了解决这样的问题,中间加一个存储器,就可以减缓这样的情况。但是我们知道,我们平时很少见到校长的,于是就有了一个问题,校长是怎么对我们进行管理的?这是因为校长要管理我们,其实只要管理我们的数据就行,比如对我们的绩点,处分情况,学号等进行管理就可以达到管理学生的目的。

2025-01-18 14:23:52 1306 20

原创 有趣的扫雷小游戏

首先,我们要想到一个问题一般游戏中,当我们点击了某个无雷的方格时,方格内会显现出其周围一圈的雷的数量,,按照雷的位置是1,无雷的位置是0,这时我们只要将该格子周围的雷的数量都加起来,就可以得到该格子一圈内的雷的数量,那么问题来了,如果,我先去[0][0]这个位置呢?话说,距离本人写博客已经过去近两月了,并非是我偷懒了(虽然还是有点懒),其实是去巩固自身的学识更新自己的技术,使我写出的文章充满干货,让读者多学到东西,OK,废话不多说,让我开始介绍今天的扫雷游戏吧!首先,咱们要确定正方形的大小,即格子的多少。

2024-04-06 17:06:21 576 17

原创 我的第一篇文章

一开始我对计算机的理解仅仅停留在游戏,软件等一类的东西,比如米哈游,网易,腾讯等公司,但随着我对计算机的了解,我逐渐知道我所知晓的东西还是太片面了,于是我更加知晓学习的重要性,在这片领域,编码能力、学习能力都是很重要的东西,归根结底,积累很重要,我每天一般会用到5到6小时来打磨我的编程能力以及学习相关知识,从开始接触到c语言到现在学习数据结构,我也是这样做的,这样的坚持让我的编程能力有了极大的进步,而这样的编程能力又成为了我学习的动力,我希望自己能坚持下去。1.自我介绍和写文章的原因。

2024-01-31 16:28:55 285

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除