自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 协议集合(学习笔记)

仅学习使用

2024-09-06 18:17:14 949

原创 为什么生成设备号过后,还要去板子mknod /dev/led c 11 0来生成设备文件呢?

在Linux系统中,生成设备号(通过MKDEV宏或类似方式)和创建设备文件(如使用mknod命令)是两个不同的步骤,它们各自承担着不同的职责。

2024-08-31 09:41:50 247

原创 消息队列实现

消息队列(Message Queue)是一种用于任务间或进程间通信的机制,它允许一个或多个生产者(发送者)将消息放入队列中,然后由一个或多个消费者(接收者)从队列中取出消息并处理。消息队列可以实现数据的异步传输,有助于缓解高并发系统下的数据处理压力,同时也为不同系统或服务之间的解耦提供了可能。

2024-08-19 10:46:55 328

原创 cgi和boa服务器和html网页的关联

CGI是桥梁:CGI作为Web服务器和应用程序之间的桥梁,使得Web服务器能够调用外部程序生成动态内容。Boa是服务器:Boa服务器作为Web服务的提供者,通过CGI协议调用外部程序或脚本,并将处理结果返回给客户端浏览器。HTML是展示层:HTML网页作为Web服务的展示层,用于展示静态内容和通过CGI脚本生成的动态内容。

2024-08-16 15:55:07 427

原创 day1复习

在UNIX和类UNIX系统中,信号量是通过信号量集(semaphore set)来管理的,这些信号量集位于内核中,并且可以通过特定的键(key)来访问。当两个进程想要共享同一个信号量时,它们需要使用相同的键来访问同一个信号量集。在我们调用shmget函数之前,必须调用ftok来帮我们生成一个key,该key就是给shmget函数第一个参数使用了,表示表示该共享内存的唯一标识,这个key在内核中,会在共享内存的结构体,设置给共享内存的ID;互斥锁初始化(动态/静态)---->锁的申请和释放--->锁的销毁。

2024-08-15 11:40:13 650

原创 I2C总线二级外设驱动开发(函数和代码详解)

I2C总线是一种广泛使用的串行通信总线,用于连接微控制器及其外围设备。在Linux内核中,I2C总线驱动开发包括I2C总线控制器驱动(也称为适配器驱动)和挂接在I2C总线上的二级外设驱动(也称为客户驱动或设备驱动)。疑惑1:二级外设驱动编写好,那总线上的那个iic驱动不需要编写吗当你为挂接在I2C总线上的二级外设编写驱动程序(也称为客户驱动或设备驱动)时,你通常不需要从头开始编写整个I2C总线(也称为I2C适配器)的驱动程序,除非该I2C总线控制器是全新的、且Linux内核中尚不支持的。

2024-07-22 10:03:56 1016

原创 内核定时器完成秒设备原理以及详细步骤

首先,你需要定义一个结构体来表示你的设备,其中包含一个timer_list类型的成员用于定时器。#include // 包含定时器相关的头文件// 内核定时器// 记录秒数// 可以添加其他设备相关的字段。

2024-07-15 15:41:54 511

原创 信号量、互斥锁、并发机制选择原则

适用场合:任务上下文之间且临界区执行时间较长时的互斥或同步问题。

2024-07-15 12:38:33 192

原创 并发控制:上下文、中断屏蔽和原子变量原理详解

在Linux中,上下文通常指的是执行某个操作或访问某个资源时的环境状态,包括但不限于用户身份、权限级别、当前工作目录等。上下文对于理解和管理文件权限尤为重要,因为它决定了哪些操作是允许的,哪些是被禁止的。

2024-07-15 11:23:58 733

原创 IO模型:多路复用及信号驱动(fasync)原理代码详解

select、poll、epoll都是I/O多路复用的机制,它们允许单个进程或线程同时监视多个文件描述符(如socket、管道、文件等),以等待I/O操作(如读、写、异常)的完成。下面分别解释这三种机制的原理:原理概述:工作流程:缺点:原理概述:工作流程:优点:缺点:原理概述:工作流程:优点:缺点:本文程序将使用select:使用函数:接上文代码加入多路复用功能: mychar.c:(部分新加入) 代码注释:调用:这一行调用了函数。是监视的文件描述符中的最大值加1(因为文件描述符是从0开始计数的),这

2024-07-14 21:46:00 892

原创 对异步通知感兴趣的文件描述符

文件描述符是操作系统为每个打开的文件或网络连接分配的一个唯一标识符。它们用于在程序中引用文件或网络连接,以便进行读写等操作。“对异步通知感兴趣的文件描述符”是指那些被特别配置或注册以接收异步通知的文件描述符。它们允许应用程序在特定事件发生时及时响应,而无需主动查询或阻塞等待。这种机制提高了系统的响应性和效率,并广泛应用于各种编程场景中。

2024-07-14 20:47:11 393

原创 IO模型:阻塞和非阻塞

在阻塞I/O模型中,当一个I/O操作(如读操作或写操作)被发起时,程序会暂停(或阻塞)执行,直到这个操作完成。阻塞I/O模型的一个显著特点是简单且易于实现,但在处理大量并发连接时可能会导致性能瓶颈,因为每个连接都会占用一个线程或进程,而这些线程或进程在I/O操作期间是空闲的。与阻塞I/O模型相反,非阻塞I/O模型允许程序继续执行,而无需等待I/O操作完成。程序需要定期检查I/O操作的状态,或者使用其他机制(如I/O多路复用)来等待I/O操作准备就绪。功能:条件不成立则让任务进入浅度睡眠,直到条件成立醒来。

2024-07-14 16:24:19 1007

原创 ioctl、printk及多个此设备支持

(注册字符设备完整解析版)对于修改全局变量后的代码注释://已知成员的地址获得所在结构体变量的地址:container_of(成员地址,结构体类型名,成员在结构体中的名称)//当驱动程序接收到打开文件的请求(如通过其open方法)时,它有机会为新的file结构体分配一个private_data。这通常涉及到动态分配一个驱动程序特定的数据结构(如struct mychar_dev),并将其地址存储在file->private_data中。

2024-07-12 17:45:35 861

原创 注册字符设备完整流程代码详解

在Linux中,设备节点(也称为设备文件)是文件系统中的一种特殊文件,它提供了一个接口来访问硬件设备。设备节点允许用户空间程序通过标准的文件操作(如openreadwriteclose等)来与硬件设备交互,而无需了解硬件的具体细节。设备节点通常位于/dev目录下,这是专门用于存放设备文件的目录。在/dev目录中,每个设备节点都代表了一个硬件设备或设备的一个特定部分(如磁盘的一个分区)。

2024-07-12 15:09:48 1442

原创 hash表概念及代码理解

Hash表(也称为哈希表、散列表)是一种使用哈希函数组织数据,以支持快速插入和搜索的数据结构。它通过把键值(Key)映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数称为哈希函数,存放记录的数组称为哈希表。

2024-07-12 10:50:25 400

原创 struct file,struct inode和驱动文件以及用户空间操作文件什么关联

以及驱动文件和用户空间操作文件之间的关系在Linux内核中非常重要,它们共同构成了文件系统的核心部分,使得用户空间程序能够高效地访问和操作系统中的文件和设备。

2024-07-10 11:28:02 352

原创 Linux内核源码的构成及其作用

Linux内核源码是构成Linux操作系统的核心部分,它负责管理系统资源、调度进程、提供系统调用等功能。

2024-07-10 11:04:42 685

原创 面向对象与面向过程

面向对象面向对象面向对象(Object-Oriented,简称OO)是一种程序设计方法,它将现实世界中的事物或概念抽象为“对象”,并通过类和对象来构建程序。面向对象编程(Object-Oriented Programming,简称OOP)是这种方法的实践,它使用面向对象的语言来实现。

2024-07-08 18:16:24 745 1

原创 每一个进程有一个4g的虚拟空间还是很多进程一起分配4g的空间?

答案是:每一个进程都拥有一个独立的4G虚拟空间。这个结论主要基于以下几点理由:综上所述,每个进程都拥有一个独立的4G虚拟空间,这是操作系统提供的一种资源隔离和地址保护机制。通过虚拟地址到物理地址的映射机制,操作系统能够确保不同进程之间的地址空间不会发生冲突。

2024-07-08 17:09:52 238

原创 一个进程的代码在虚拟空间怎么分配用户空间3个g的?

虚拟地址空间的大小和布局可能因操作系统和体系结构的不同而有所差异。虚拟地址空间的存在使得操作系统能够提供更好的内存保护和隔离性,防止不同进程之间的地址冲突和数据泄露。

2024-07-08 17:08:31 653

原创 三类读写函数

一类:行缓存 ,遇到换新行(\n),或者写满缓存时,即调用系统调用函数 二类:无缓存 只要用户调这个函数,就会将其内容写到内核中stderr 三类:全缓存 只有写满缓存再调用系统调用函数 注:前面说:“行缓存 ,遇到换新行(\n),或者写满缓存时,调用系统调用函数。”在这并没有达到前两个要求,是因为fclose的作用---关闭一个文件流,使用fclose就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。 注: 这里之所以加上fseek移动光标至writeBuff的头部,是因

2023-08-21 11:00:00 65 1

原创 文件IO与标准IO的区别

此前文章中,open,close,write与read函数都是使用unistd.h。与一些普通文件的读写没有关系,也即这些函数不能读写普通文件。标准IO中的相关函数,不仅可以读写普通文件,也可以向标准的输入或标准的输出中读或写。

2023-08-20 18:15:22 71 1

原创 fread函数与fwrite函数

用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初 始化为‘’或‘/0’;//stream为fopen中返回的FILE指针。注:将fp内容读入readBuff中,每一轮读两次,每次读4个字节。要将数据写入pr中,必须为pr分配内存,一个int为4个字节,所以要x4。注:光标相当于在8位字节后开始,总共只能12位所以只有hell。

2023-08-20 06:00:00 151 1

原创 fopen函数与fclose函数

注意:在fopen操作后要进行判断,是否文件打开,文件真正打开了才能进行后面的读或写操作,如有错误 要进行错误处理。文件打开了,返回一个指向该打开文件的指针(FILE结构);文件打开失败,错误上存errorcode(错误代码)。关闭一个文件流,使用fclose就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关 的缓冲区。由mode字符可知,上述如r、w、a在其后都可以加一个b,表示以二进制形式打开文件。第一个参数为欲打开文件的文件路径及文件名,第二个参数表示对文件的打开方式。

2023-08-19 17:20:00 71

原创 main函数及实现CP指令

当我们要运行一个可执行文件时,在DOS提示符下键入文件名,再输入实际参数即可把这些实参传送到main的形参中去。在退出后再写入一次,把不够128字节的数据也写入。memset作用:更新数组,每读取一次把数组里面的值清空。但是应该特别注意的是,main 的两个形参和命令行中的参数在 位置上不是一一对应的。C语言规定了main函数的参数只能有两个,一个是argc,一个是argv,并且argc只能是整数。src: 源文件 des :目标文件。目的:将源文件复制到目标文件。

2023-08-19 11:43:19 124

原创 lseek函数与fseek函数

理解:当offset为负数时,如-2,则在mm中打印出第一次为hello world,第二次则为hello worhello world。光标前移两位覆盖之前的值。当whence值为SEEK_CUR或SEEK_END时, 参数offset允许负值的出现。当想改变光标打印出来的值时,改变lseek()中的偏移量即可。返回值: 文件读写距离文件开头的字节大小,出错返回 -1。

2023-08-18 22:11:27 316

原创 Write函数与Read函数

write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内。

2023-08-18 20:10:41 137

原创 Linux文件指令与权限

Linux文件指令与权限

2023-06-13 19:34:50 72 1

原创 Linux目录结构与文件操作

Linux自我学习记录

2023-06-11 00:19:19 99 4

空空如也

空空如也

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

TA关注的人

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