(文章目录) 前言 本篇文章继续带大家来刷题。 一、纯虚函数和虚函数的区别 1.实现:纯虚函数没有具体的实现代码,只有函数原型,通过在函数声明的末尾添加= 0来指示。虚函数具有默认的实现代码,但可以在派生类中进行重写。 2.抽象类:包含纯虚函数的类是抽象类(Abstract Class),不能直接实例化对象,只能被用作其他具体类的基类。而包含虚函数的类可以实例化对象,但如果包含了至少一个纯虚函数
(文章目录) 前言 上篇文章我们讲解了使用select进行IO复用,这篇文章我们来讲解使用poll函数来进行多路IO复用。 一、poll函数讲解 poll() 函数是在网络编程中常用的一个系统调用函数,用于监视多个文件描述符的状态,以确定是否有文件描述符准备好进行读取、写入或出现异常。 以下是 poll() 函数的基本用法: #include <poll.h> int poll(s
(文章目录) 前言 本篇文章我们来学习汇编指令,学习汇编对我们了解底层的逻辑是非常有帮助的,比如.s启动文件,学习了汇编后我们就可以读懂这个文件中的内容了。 一、RISC和CISC RISC(Reduced Instruction Set Computer)和CISC(Complex Instruction Set Computer)是计算机体系结构的两种不同设计理念。 RISC(精简指令集计算
(文章目录) 前言 本篇文章来讲解一下TCP的状态转换关系,学习这个状态转换关系对于我们深入了解网络编程是非常有必要的。 一、TCP状态转换图 二、TCP连接状态转换解析 客户端状态转换: 1.CLOSED -> SYN-SENT:当客户端尝试与服务器建立连接时,客户端从CLOSED状态转换到SYN-SEND状态。此时客户端发送SYN(同步)包,表示请求建立连接,并等待服务器的确认。 2
(文章目录) 前言 本篇文章主要来讲解epoll的ET模式和LT模式,epoll中有两种模式可以选择一种是ET模式(边缘触发模式),另一种是LT模式(水平触发模式) 一、ET模式和LT模式概念讲解 1.水平触发模式(LT,Level-Triggered) 在水平触发模式下,当一个文件描述符上的I/O事件就绪时,epoll会立即通知应用程序,然后应用程序可以对就绪事件进行处理。即,只要文件描述符处
(文章目录) 前言 本篇文章我们讲解epoll函数的使用方法,epoll相比于poll来说性能方面有所提升和改进。 一、epoll概念特点讲解 epoll 是 Linux 上一种高性能的多路复用机制,用于监视大量文件描述符并在它们就绪时通知应用程序。它是在 select 和 poll 的基础上进一步优化和改进而来的。 epoll 的主要特点包括: 1.没有文件描述符数量限制:与 select 和
(文章目录) 前言 本篇文章带大家学习Linux网络编程中的高并发服务器。首先我们需要了解什么是高并发服务器,然后是学习如何来编写高并发服务器。 一、什么是高并发服务器 高并发服务器是指能够同时处理大量并发请求的服务器系统。在网络应用中,当多个用户或客户端同时请求服务器时,服务器需要能够高效地处理这些请求,并且保持良好的性能和稳定性。 高并发服务器的设计和实现需要考虑以下几个关键因素: 1.多线
(文章目录) 前言 本篇文章继续讲解Linux线程同步,上篇文章讲解了互斥锁,本篇文章为大家讲解try锁和读写锁。 一、try锁 在Linux的多线程编程中,try锁是一种非阻塞的锁机制,也称为尝试锁。它允许线程尝试获取锁,如果锁当前是可用的,线程将获取到锁并继续执行,如果锁当前被其他线程持有,则线程不会阻塞等待,而是立即返回,并且可以根据返回值来确定是否成功获取到锁。 try锁通常通过函数来实
(文章目录) 前言 本篇文章来讲解一下条件变量的使用。 一、条件变量概念 条件变量(Condition Variable)是并发编程中一种线程同步机制,用于实现线程之间的等待和通知机制。它是一种与特定条件相关的线程同步原语。 条件变量用于线程间的协调,允许一个线程在满足某个特定条件之前等待,并在其他线程满足条件后被通知继续执行。它通常与互斥锁(Mutex)结合使用,以提供更精细的线程同步和共享数
(文章目录) 前言 本篇文章继续讲解进程间通信,之前我们已经讲解完管道,FIFO来进行进程间通信了,这篇文章将讲解使用mmap来进行进程间通信。 一、父子进程间通信 使用mmap可以创建一块虚拟内存进行父子间的通信。 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include
(文章目录) 前言 本篇文章来讲解在Linux中tasklet,工作队列,内核线程的使用。 一、tasklet tasklet在内核里面其实就是下面这样的一个结构体: struct tasklet_struct { struct tasklet_struct *next; unsigned long state; atomic_t count; void (*func)(unsigned
(文章目录) 前言 Linux进程的调度进制一共有三种方法:时间片轮转调度,优先级调度,完全公平调度。 一、时间片轮转调度 时间片轮转调度(Round Robin Scheduling):这是一种基于时间片的调度算法。每个进程被分配一个固定的时间片,在这个时间片内运行,然后被挂起,让下一个进程运行。如果一个进程在时间片结束之前没有完成,它将被放回队列的尾部等待下一次调度。这种调度算法确保了公平性
(文章目录) 前言 本篇文章继续讲解一下Linux中常用的命令,用户和权限管理。 一、useradd命令 useradd命令是在Linux和Unix操作系统上用于创建新用户的命令。它允许系统管理员在系统上创建一个新的用户账户。下面是对useradd命令的详细解释: 基本语法: useradd [选项] 用户名 主要选项: 1.-m, --create-home:创建用户的主目录。使用该选项可以
(文章目录) 前言 本篇文章我们来深入的理解一下理解程序的结构。 一、程序的组成 通常情况下,一个可执行程序由以下几个不同的段组成: 1.代码段 (Text Segment): 代码段通常被加载到只读内存区域中,并包含程序的指令和函数。在段加载完成后,代码段的内容不可更改。当程序开始执行时,指令将从代码段中加载并执行。 2.数据段 (Data Segment): 数据段通常存储了程序中的初始化数
(文章目录) 前言 本篇文章将讲解如何在Linux下使用串口。 一、Linux下的TTY体系介绍 在Linux系统中,tty(Teletypewriter)是指一种终端设备,它提供了用户与操作系统之间的交互界面。在较早的计算机系统中,tty是以打字机作为输入输出设备的终端系统,而现代的Linux系统中,tty则对应着虚拟终端。 Linux下的tty体系是由多个虚拟终端组成的,每个虚拟终端都对应着
(文章目录) 前言 本篇文章将带大家来正式学习Linux网络编程。 一、客户端与服务端 一般认为服务器是一个长时间运行的程序(既守护程序)他只在相应来自网络请求时才发送网络消息 协议的另一端是客户端程序,比如某些浏览器等,一般和服务器之前的通信大多数都是由客户端发起 一般来说一个客户端每次只能和一个服务器进行通信,但是客户端也可以和多个服务端进行通信,可能在10分钟客户端就和不同的服务器进行通
(文章目录) 前言 上篇文章讲解了如何创建一个客户端,这篇文章将创建一个服务端用来和上篇文章的客户端进行通信。 一、编程前的准备 1.相关函数的了解 (1)socket函数创建套接字 这个函数上篇文章讲解过了这里就不过多讲解。 (2)bind绑定函数 在man手册中找到这个函数的具体用法: 函数原型: int bind(int sockfd, const struct sockaddr *ad
(文章目录) 前言 本篇文章我们来介绍一下Linux中的调试利器GDB工具,在Linux的调试中GDB可以帮助我们来解决非常多的问题。 一、GDB概念 GDB是一个功能强大的调试工具,可以用于分析程序崩溃,跟踪程序执行过程,查看内存和寄存器状态等。以下是使用 GDB 进行基本调试的步骤和命令: 1.编译程序并使用 -g 参数开启调试信息 在使用 GDB 进行调试前,需要在编译程序时添加 -g 参
(文章目录) 前言 本篇文章我们来讲解链接器的意义。 一、链接器概念介绍 链接器(Linker)是计算机编译器系统中的一个重要组成部分,它用于将编译后生成的目标模块(Object Module)链接在一起,生成可执行文件或动态链接库(Dynamic Linking Library)。 链接器的主要任务是将符号(Symbol)引用解析到符号定义上,将多个目标模块合并为一个可执行文件或动态链接库,生
(文章目录) 前言 本篇文章我们来讲解按键的驱动程序,按键驱动程序的主要思路就是使用中断的方式,当按键按下时会发生中断这个时候就可以通过中断来获取按键的状态。 一、设备树编写 我的开发板上有两个按键,那么我们就在gpios里面添加两个gpio的信息。 mykey:mykey{ compatible = "my,gpio_key"; gp
(文章目录) 前言 本篇文章将给大家介绍套接字地址结构和字节操作函数的使用。 一、IPV4套接字地址结构 IPV4套接字地址结构通常也称为"网际套接字地址结构"它以sockaddr_in命名。定义在<in.h>头文件中。 sin_family:表示协议族,一般为AF_INET。 sin_port:表示端口号,需要以网络字节序存储,通常使用htons()函数进行转换
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 (文章目录) 前言 本篇文章将引入一个重要的知识:TCP的粘包问题,在发送数据的时候可能会出现粘包的问题,很多初学者应该都不知道什么是粘包,那么本篇文章将讲解什么是粘包,又怎么样解决粘包,这将是一个重点问题,希望大家好好理解。 下面我们先做一个小实验。 一、一次发送多个数据实验 改写之前编写的client程序: #includ
(文章目录) 前言 Linux是一个基于文件系统的操作系统,文件操作是其中一项最基本的任务之一。通过文件操作,用户可以创建、移动、复制、读取和修改文件及目录等。 一、基础命令简单讲解 1.ls:列出目录中的文件和子目录。 ls -a:显示所有包括隐藏文件。 ls -l:使用长格式输出文件详细信息。 ls -h:显示文件大小时使用易读的格式。 cd:切换当前目录。 2.cd /:切换到根目录。 c
(文章目录) 前言 本篇文章将讲解TCP的连接的建立和终止,主要就是讲解TCP的三路握手和TCP连接断开内部发生的一些机制和事件。 一、TCP的三路握手 TCP三路握手所交换的三个分节: (1)服务器必须准备好接受外来的连接,这通常通过调用socket、bind和listen这三个函数来完成,我们称之为被动打开。 (2)客户通过调用connect发起主动打开。这会导致客户TCP发送一个SYN(
(文章目录) 前言 本篇文章作为多线程的入门讲解将带大家先创建几个线程来感受一下什么是多线程,了解一下多线程到底有什么作用。 一、线程概念 线程(Thread)是程序执行流的最小单元,是进程中的一个实体,是被操作系统独立调度和分派 CPU 时间的基本单位。线程和进程一样都属于操作系统中的多任务处理机制。 每一个线程都有自己独立的运行栈和程序计数器,并且共享所属进程的内存空间。线程共享的资源包括代
(文章目录) 前言 本篇文章将给大家介绍一下SR501驱动程序的编写。 一、SR501模块介绍 SR501是一种基于红外线感应原理的人体感应模块,通常被用于安防等一系列自动控制场景中。它主要通过红外线传感器检测感应区域内的人体热辐射,当检测到人体进入这个区域时,输出高电平信号;当人体离开这个区域时,输出低电平信号。 SR501模块整体封装在一块小板子上,板子上有两个旋钮,可以通过旋转它们来调节感
@TOC前言本篇文章来讲解I2C系统的重要结构体,了解这些结构体对于编写I2C驱动来说是至关重要的,所以要想编写好一个I2C驱动程序那么就必须先了解这些结构体。一、I2C硬件框架这里使用百问网的一张图片来讲解:一个芯片中可以有多个I2C控制器,并且一个I2C控制器可以控制多个设备。那么在对应的驱动中I2C控制器和这些设备还有传输的消息都是用什么来表示的呢?在Linux内核中:使用i2c_adapt
@TOC前言本篇文章我们来介绍一些Linux开发中的辅助工具,有了这些辅助工具将会让我们的开发变的更加轻松。一、add2lineaddr2line是一个GNU调试工具,用于将程序计数器(PC)地址转换为对应的源文件名、函数名和行号。addr2line可通过调试信息,将内存地址映射到源代码行号,并在开发人员调试应用程序时帮助找到问题所在。addr2line通常与交叉编译器一起使用,用于在代码嵌入式或
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号