当前位置: 首页 > news >正文

从0开始学linux韦东山教程第四章问题小结(1)

  本人从0开始学习linux,使用的是韦东山的教程,在跟着课程学习的情况下的所遇到的问题的总结,理论虽枯燥但是是基础。说实在的越看视频越感觉他讲的有点乱后续将以他的新版PDF手册为中心,视频作为辅助理解的工具。参考手册为嵌入式Linux应用开发完全手册V5.3_IMX6ULL_Pro开发板。
摘要:这节课手册上没有全部内容,我是根据他的补充视频制作的这个总结博客。这节博客主要讲的是,将hello驱动程序在ubuntu上编译后下载到开发板上,以及makefile文件的优势和语法内容。IO部分,open.c打开文件代码详细解读。
摘要关键词:hello驱动,makefile,open.c

本文详细介绍以下问题,如果你遇到了以下问题,看看我的方案能否解决。

1.上传hello驱动程序
2.什么是makefile,以及部分语法
3.IO部分,open.c打开文件代码详细解读

1.上传hello驱动程序

上传hello驱动程序之前,本人习惯在vc code上先验证一下。如下图所示。
在这里插入图片描述

得先确保vs code上安装了gcc以及g++。
在这里插入图片描述

gcc --version
g++ --version 
gcc -o .\hello hello.c

在这里插入图片描述
输入以下命令行,编译测试hello.c文件
在这里插入图片描述

小知识,在 VSCode 中,你可以通过设置快捷键来调整字体大小,具体步骤如下:
  打开 VSCode。按下 Ctrl + Shift + P(Windows/Linux)或 Cmd + Shift + P(macOS)打开命令面板。输入 Preferences: Open Keyboard Shortcuts (JSON),然后选择该选项,打开 keybindings.json 文件。接下来,你可以添加两个快捷键来增加或减少字体大小。

在这里插入图片描述
在这里插入图片描述

[{"key": "ctrl+=",    // 设置你想要的快捷键,这里是 Ctrl + ="command": "editor.action.fontZoomIn"},{"key": "ctrl+-",    // 设置你想要的快捷键,这里是 Ctrl + -"command": "editor.action.fontZoomOut"}
]

2.什么是Makefile

  其是一种自动化构建工具的配置文件,通常用于项目开发中,特别是在 C/C++ 等编程语言中。它用于定义和管理项目中各个文件之间的依赖关系,以及如何自动化地编译、链接和构建程序。

编写001_test_app程序

本人编写这方面的程序使用的是VSCode,所以会有些许不同

a.c程序

在这里插入图片描述

#include<stdio.h>
extern void func_b();
void main()
{func_b();
}

  加上extern void func_b();就不会出现警报了,因为你如果没有告诉a.c这个有这个函数,但是后续找着了,它会觉得突兀。

b.c程序

在这里插入图片描述

#include<stdio.h>
void func_b()
{printf("hello world! This is b print.");
}

以上程序构建完成之后输入命令行在下方窗口
在这里插入图片描述

gcc -o test a.c b.c
./test

  其实你如果细致的话可以看到,我最开始也没有声明extern,导致有所警报。
win11测试过了,到Ubuntu其实肯定也没有问题。演示一遍吧。

首先迁移

在这里插入图片描述
我把makefile文件夹放到了ubuntu中的nfs_rootfs下。
在这里插入图片描述
  我是直接从ubuntu中打开的,首先输入ls查看当先目录文件,然后cd 打开nfs_rootfs文件夹,然后cd打开makefile文件夹,ls查看一下,发现里面还有一个文件,打开001_test_app文件夹,ls再查看一下,把test.exe删除一下。重新输入以上命令行。

ls
cd nfs_rootfs
cd makefile
ls
cd 001_test_app
ls
rm test.exe
gcc -o test a.c b.c
./test

在这里插入图片描述
木有问题。

  gcc编译缺点:课上讲了这个点,我觉得恒重要,就是gcc编译效率问题,它会将文件都编译一遍,其实需要编译的也就那几个文件。对于庞大的工程来说效率太低了。
在这里插入图片描述
  视频中建议是分开将其的.o文件编译,然后再统一编译,这样效率高。后续也就引出了makefile的概念。执行make命令时在当前文件路径下查找makefile文件。
在这里插入图片描述
  具体来说,make 会根据目标文件(在这个例子中是 test)的时间戳和它所依赖的文件(如 a.o 和 b.o)的时间戳来判断是否需要重新构建。以下是发生的可能情况:

  test 已经是最新的:如果目标文件 test 的时间戳比它的依赖文件 a.o 和 b.o 都更新,make 会认为 test 已经是最新的,不需要重新编译。

  a.o 和 b.o 已经是最新的:如果 a.o 和 b.o 的时间戳比它们各自的源文件(如 a.c 和 b.c)还要新,make 认为这些对象文件已经是最新的,因此也不会重新编译它们。

makefile部分语法

test:a.o b.o c.ogcc -o test $^
%.o:%.cgcc -c -o $@ $<

test: a.o b.o c.o:这里 test 是目标,表示最终要生成的文件(可执行文件)。a.o, b.o, 和 c.o 是 test 的依赖文件(目标文件)

gcc -o test $^这条命令使用 gcc 编译器将依赖的目标文件(a.o, b.o, c.o)链接成最终的可执行文件 test。其中,$^ 是自动变量,代表所有的依赖文件(即 a.o b.o c.o),用于表示链接时要包括的对象文件。

%.o: %.c:这是一条模式规则,表示所有的 .o 文件是由同名的 .c 文件编译而来的。% 是一个通配符,表示任何文件名。因此,它表示“对于所有 .c 文件,生成相应的 .o 文件”。

gcc -c -o $@ $<:这条命令使用 gcc 编译器将 .c 文件编译成 .o 文件。-c 表示只编译不链接,-o 后面跟着目标文件名。
$@ 是自动变量,代表当前规则中的目标文件,在这里就是 .o 文件。
$< 是自动变量,代表当前规则中的第一个依赖文件,在这里就是对应的 .c 文件

在这里插入图片描述

  make clean这个命令我之前学过,可以看出他就是执行你想去除的文件。后续语法就不具体讲解了。

IO部分

open.c代码

接下来详细解析一下它的代码,做到知道为什么,知道怎么改,怎么来的。

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>/** ./open 1.txt* argc    = 2* argv[0] = "./open"* argv[1] = "1.txt"*/int main(int argc, char **argv)
{int fd;if (argc != 2){printf("Usage: %s <file>\n", argv[0]);return -1;}fd = open(argv[1], O_RDWR);if (fd < 0){printf("can not open file %s\n", argv[1]);printf("errno = %d\n", errno);printf("err: %s\n", strerror(errno));perror("open");}else{printf("fd = %d\n", fd);}while (1){sleep(10);}close(fd);return 0;
}
man man

  man man 这个命令的作用是显示 man 命令本身的帮助页面,也就是查看关于 man 命令的详细文档。
在这里插入图片描述

   2   System calls (functions provided by the kernel)3   Library calls (functions within program libraries)

2. System calls (functions provided by the kernel):这一章节包含 系统调用 的文档。系统调用是程序通过它们与操作系统内核进行交互的接口。当程序需要执行操作系统级的任务(比如文件操作、内存分配、进程管理等)时,就会调用系统调用。这些函数由操作系统内核提供。例如,open、read、write 等函数就属于系统调用,它们允许程序与文件系统、I/O 设备等进行交互。
3. Library calls (functions within program libraries):这一章节包含 库函数 的文档。库函数是程序开发中常用的一些函数,它们不直接由操作系统提供,而是由标准库或其他编程库提供。例如,C 标准库中的 printf、malloc 等函数就是库函数。它们通常在应用程序中被用来简化常见的操作。

小结函数主要也就是通过man 2 函数,man 3 函数来查看

构建open.c文件
就得知道open这个函数需要啥,得了解它,既然是内核函数那就得写以下命令行

man 2 open

  如下图所示,open函数,openat函数,creat函数都是int类型,所以返回的肯定是一个值,我得用一个int型变量接受,以及他们要用的头文件我得囊括进去。所以就有了以下代码。
在这里插入图片描述

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int fd;  //负责接受值

printf 函数
我想查看打印资料,得用输出字符串函数。

    if (argc != 2){printf("Usage: %s <file>\n", argv[0]);return -1;}

printf它肯定不是内核函数所以,我用以下命令行查看。

man 3 printf

如下图所示文件中写了所需要的头文件,以及函数构造啥的。
在这里插入图片描述
  所以我有个问题,为什么int printf(const char *format, …);是int类型,但是我从来没有填写一个变量去接受值呀,一般不是直接printf(“hello!”)直接输出吗?
  答案:printf 函数的返回类型是 int,这是因为它的返回值表示打印的字符数(成功打印的字符数)。虽然在常见的使用中,你通常不会直接捕获这个返回值,但它是 printf 函数设计的一部分。
printf 返回一个 整数,表示成功写入到标准输出(即屏幕)上的字符数。
如果发生错误,printf 会返回一个负值(通常是 -1),表示输出失败。

int num_chars = printf("Hello, world!\n");
printf("Printed %d characters.\n", num_chars);

  在这种情况下,你可以捕获返回值 num_chars 来知道打印了多少个字符。这也就是为什么,不填写一个变量接受。
  要想打开一个文件,那么输入一定是 ./open 1.txt大于等于两个字符的,所以具体的实现代码如下。

    if (argc != 2){printf("Usage: %s <file>\n", argv[0]);return -1;}

而argv[1]对应的也就是1.txt,也就是需要我fd去接受的。

   fd = open(argv[1], O_RDWR);

  argv[1]:表示命令行中传入的第二个参数,即你想要打开的文件名。
O_RDWR:表示以 读写模式(read-write)打开文件。如果文件不存在,或者发生其他错误,open 会返回一个负值(通常是 -1)。
所以当我反馈值小于0时,得输出错误,输出错误的函数得学。

if (fd < 0){printf("can not open file %s\n", argv[1]);printf("errno = %d\n", errno);printf("err: %s\n", strerror(errno));perror("open");}

输入以下命令行查看输出错误函数

man 3 errno

在这里插入图片描述
在这里插入图片描述
  本人将以上3段话翻译了一下,errno 的值只有在系统调用返回错误时(例如,大多数系统调用返回 -1;大多数库函数返回 -1 或 NULL)才有意义;成功的函数调用可以修改 errno。系统调用或库函数从不将 errno 的值设置为零。

  对于某些系统调用和库函数(例如,getpriority(2)),-1 是成功的有效返回值。在这种情况下,可以通过在调用前将 errno 设置为零,之后检查返回值是否可能指示发生了错误,并通过检查 errno 是否非零来区分成功返回和错误返回。

  errno 根据 ISO C 标准定义为一个可修改的整型左值,不得显式声明;errno 可能是一个宏。errno 是线程局部的;在一个线程中设置它不会影响其他线程中的值。

  意思就是,假设我的输入为./open 2.txt这个文件其实不存在。程序会尝试打开 2.txt,但是由于文件不存在,open 调用将失败并返回 -1。errno 的值会被设置为 ENOENT,即错误代码 2,表示“没有这样的文件或目录”。
在这里插入图片描述


如图所示,不同值对应的不同错误。
一直翻,翻到文档的最下边,对类似应用的介绍。
在这里插入图片描述

这里也就引出了strerror(errno)这个函数。

man 3 strerror

在这里插入图片描述

我们用char函数输入错误代码值,
在这里插入图片描述
  此处详细介绍了这个函数,strerror() 函数返回一个指向字符串的指针,该字符串描述了作为参数传入的错误码 errnum,并且可能使用当前区域设置的 LC_MESSAGES 部分来选择合适的语言。(例如,如果 errnum 是 EINVAL,返回的描述将是“Invalid argument”(无效参数))。这个字符串不能被应用程序修改,但可能会被后续对 strerror() 或 strerror_l() 的调用修改。除了这些函数外,没有其他库函数(包括 perror(3))会修改该字符串。
  说人话就是,strerror(2) 会输出No such file or directory,strerror(3) 会输出No such process.对应上图。

man 3 perror

在这里插入图片描述
  翻译一下以上圈红部分,看看这个函数作用,perror() 函数会在标准错误输出上打印出描述上一次系统或库函数调用时遇到的错误信息。首先(如果 s 不是 NULL 且 *s 不是空字节(‘\0’)),会打印传入的字符串 s,后面跟上冒号和一个空格。然后打印出与当前 errno 值对应的错误信息,并以换行符结尾。为了更好地使用这个函数,传递给它的字符串通常应当包含发生错误的函数名称。
  说人话就是,假设我的输入为./open 2.txt这个文件其实不存在,perror 通过访问全局变量 errno 来获得错误码,并根据该错误码来输出相应的错误信息。如果你传递给它的字符串(例如 “open”)不是空的,它就会将这个字符串作为前缀输出,后跟错误描述。

man 3 sleep

sleep调用的头文件,以及函数作用。
在这里插入图片描述
  sleep() 函数使调用线程进入休眠状态,直到指定的实际秒数(seconds)过去,或者直到一个未被忽略的信号到达。

我直接在我的vs code上测试的,当我2.txt文件不存在时,出现以下报错。
在这里插入图片描述
在这里插入图片描述

相关文章:

从0开始学linux韦东山教程第四章问题小结(1)

本人从0开始学习linux&#xff0c;使用的是韦东山的教程&#xff0c;在跟着课程学习的情况下的所遇到的问题的总结,理论虽枯燥但是是基础。说实在的越看视频越感觉他讲的有点乱后续将以他的新版PDF手册为中心&#xff0c;视频作为辅助理解的工具。参考手册为嵌入式Linux应用开发…...

TYUT-企业级开发教程-第三章

JAVAWEB的三大组件 在 Spring Boot 项目中&#xff0c;会自动将 Spring 容器中的 Servlet 、 Filter 、 Listener 实例注册为 Web 服务器中对应的组件。因此&#xff0c;可以将自定义的 Java Web 三大组件作为 Bean 添加到 Spring 容器中&#xff0c;以实现组件的注册。使用 S…...

【数据结构】2-3-2 单链表的插入删除

数据结构知识点合集 知识点 按位序插入带头节点链表 ListInsert(&L,i,e)&#xff1a;插入操作。在表L中的第i个位置上插入指定元素e&#xff1b;找到第 i-1 个结点&#xff0c;将新结点插入其后 。 /*在带头节点的单链表L的第i个位置插入元素e*/ bool ListInsert(LinkList …...

spark-配置yarn模式

1.上传并解压spark-3.1.1-bin-hadoop3.2.tgz &#xff08;/opt/software) 解压的命令是&#xff1a;tar -zxvf spark-3.3.1-bin-hadoop3.tgz -C /opt/module (cd /opt/software 进入software&#xff09; 2.重命名 解压之后的目录为spark-yarn&#xff08;原为spark-3.1.1-…...

鸿蒙系统电脑:开启智能办公新时代

鸿蒙系统电脑&#xff1a;开启智能办公新时代 引言 2025 年 5 月 8 日&#xff0c;华为正式推出了鸿蒙系统电脑&#xff0c;这款具有里程碑意义的产品&#xff0c;不仅彰显了华为在智能设备领域的创新实力&#xff0c;也为用户带来了全新的智能办公体验。在数字化转型加速的背…...

Ubuntu---omg又出bug了

自用遇到问题的合集 250518——桌面文件突然消失 ANS&#xff1a;参考博文...

COCO数据集神经网络性能现状2025.5.18

根据当前搜索结果&#xff0c;截至2025年5月&#xff0c;COCO数据集上性能最佳的神经网络模型及其关键参数如下&#xff1a; 1. D-FINE&#xff08;中科大团队&#xff09; 性能参数&#xff1a; 在COCO数据集上以78 FPS的速度实现了59.3%的平均精度&#xff08;AP&#xff0…...

elementplus menu 设置 activeindex

<el-menu:default-active"defaultActive"> 更改当前激活的 index 可以 绑定:default-active"defaultActive" 改变 defaultActive 值 即会改变 index 但不会改变路径 watch(() > route.fullPath,(newPath: string) > {defaultActive.value…...

张 心理问题的分类以及解决流程

心理问题的分类以及解决流程 目录 心理问题的分类以及解决流程心理问题的分类**一、心理问题的分类与层次****1. 一般心理问题****2. 严重心理问题****3. 神经症性心理问题(神经症)****4. 精神障碍**轻度问题以心理咨询==判断:时间(3个月,1年,大于1年=神经质),社会功能(…...

网页 H5 微应用接入钉钉自动登录

ℹ️关于云审批 云审批&#xff08;cloud approve&#xff09; &#xff0c;一款专为小微企业打造&#xff0c;支持多租户的在线审批神器。它简化了申请和审批流程&#xff0c;让您随时随地通过手机或电脑完成请款操作。员工一键提交申请&#xff0c;审批者即时响应&#xff0c…...

接口——类比摄像

最近迷上了买相机&#xff0c;大疆Pocket、Insta Go3、大疆Mini3、佳能50D、vivo徕卡人像大师&#xff08;狗头&#xff09;&#xff0c;在买配件的时候&#xff0c;发现1/4螺口简直是神中之神&#xff0c;这个万能接口让我想到计算机设计中的接口&#xff0c;遂有此篇—— 接…...

java每日精进 5.18【文件存储】

1.文件存储思路 支持将文件上传到三类存储器&#xff1a; 兼容 S3 协议的对象存储&#xff1a;支持 MinIO、腾讯云 COS、七牛云 Kodo、华为云 OBS、亚马逊 S3 等等。磁盘存储&#xff1a;本地、FTP 服务器、SFTP 服务器。数据库存储&#xff1a;MySQL、Oracle、PostgreSQL、S…...

LeetCode 394. 字符串解码详解:Java栈实现与逐行解析

文章目录 1. 问题描述2. 解决思路核心问题栈的应用遍历逻辑 3. 完整代码实现4. 关键代码解析处理右括号 ]处理嵌套的示例 5. 复杂度分析6. 总结 1. 问题描述 给定一个经过编码的字符串&#xff0c;要求将其解码为原始字符串。编码规则为 k[encoded_string]&#xff0c;表示方括…...

基于STC89C52的红外遥控的电子密码锁设计与实现

一、引言 电子密码锁作为一种安全便捷的门禁系统,广泛应用于家庭、办公室等场景。结合红外遥控功能,可实现远程控制开锁,提升使用灵活性。本文基于 STC89C52 单片机,设计一种兼具密码输入和红外遥控的电子密码锁系统,详细阐述硬件选型、电路连接及软件实现方案。 二、硬…...

Android 性能优化入门(一)—— 数据结构优化

1、概述 一款 app 除了要有令人惊叹的功能和令人发指交互之外&#xff0c;在性能上也应该追求丝滑的要求&#xff0c;这样才能更好地提高用户体验&#xff1a; 优化目的性能指标优化的方向更快流畅性启动速度页面显示速度(显示和切换)响应速度更稳定稳定性避免出现 应用崩溃&…...

深入理解Docker和K8S

深入理解Docker和K8S Docker 是大型架构的必备技能&#xff0c;也是云原生核心。Docker 容器化作为一种轻量级的虚拟化技术&#xff0c;其核心思想&#xff1a;将应用程序及其所有依赖项打包在一起&#xff0c;形成一个可移植的单元。 容器的本质是进程&#xff1a; 容器是在…...

5.18本日总结

一、英语 复习list3list28 二、数学 学习14讲部分内容&#xff0c;1000题13讲部分 三、408 学习计网5.3剩余内容 四、总结 计网TCP内容比较重要&#xff0c;连接过程等要时常复习&#xff1b;高数学到二重积分对定积分的计算相关方法有所遗忘&#xff0c;需要加强巩固。…...

muduo库TcpServer模块详解

Muduo库核心模块——TcpServer Muduo库的TcpServer模块是一个基于Reactor模式的高性能TCP服务端实现&#xff0c;负责管理监听端口、接受新连接、分发IO事件及处理连接生命周期。 一、核心组件与职责 Acceptor 监听指定端口&#xff0c;接受新连接&#xff0c;通过epoll监听l…...

深入理解 OpenCV 的 DNN 模块:从基础到实践

在计算机视觉领域蓬勃发展的当下&#xff0c;深度学习模型的广泛应用推动着技术的不断革新。OpenCV 作为一款强大且开源的计算机视觉库&#xff0c;其 DNN&#xff08;Deep Neural Network&#xff09;模块为深度学习模型的落地应用提供了高效便捷的解决方案。本文将以理论为核…...

MyBatis 延迟加载与缓存

一、延迟加载策略&#xff1a;按需加载&#xff0c;优化性能 1. 延迟加载 vs 立即加载&#xff1a;核心区别 立即加载&#xff1a;主查询&#xff08;如查询用户&#xff09;执行时&#xff0c;主动关联加载关联数据&#xff08;如用户的所有账号&#xff09;。 场景&#xf…...

6.2.2邻接表法-图的存储

知识总览&#xff1a; 为什么要用邻接表 因为邻接矩阵的空间复杂度高(O(n))&#xff0c;且不适合边少的稀疏图&#xff0c;所以有了邻接表 用代码表示顶点、图 声明顶点图信息 声明顶点用一维数组存储各个顶点的信息&#xff0c;一维数组字段包括2个&#xff0c;每个顶点的…...

【甲方安全建设】拉取镜像执行漏洞扫描教程

文章目录 前置知识镜像(Docker Image)是什么?镜像的 tag(标签)查看本地已有镜像的 tag查看远程仓库的所有 tag构建镜像与拉取镜像的区别正文安装docker拉取待扫描镜像安装 veinmind-runner 镜像下载 veinmind-runner 平行容器启动脚本快速扫描本地镜像/容器6. 生成 报告前…...

第四天的尝试

目录 一、每日一言 二、练习题 三、效果展示 四、下次题目 五、总结 一、每日一言 很抱歉的说一下&#xff0c;我昨天看白色巨塔电视剧&#xff0c;看的入迷了&#xff0c;同时也看出一些道理&#xff0c;学到东西&#xff1b; 但是把昨天的写事情给忘记了&#xff0c;今天…...

大数据场景下数据导出的架构演进与EasyExcel实战方案

一、引言&#xff1a;数据导出的演进驱动力 在数字化时代&#xff0c;数据导出功能已成为企业数据服务的基础能力。随着数据规模从GB级向TB级甚至PB级发展&#xff0c;传统导出方案面临三大核心挑战&#xff1a; ‌数据规模爆炸‌&#xff1a;单次导出数据量从万级到亿级的增长…...

svn: E170013 和 svn: E120171 的问题

在 Deepin23 上尝试用 svn 连接我的 Visual SVN 服务器&#xff0c;得到如下错误信息&#xff0c; > svn: E170013: Unable to connect to a repository at URL https://my.com/svn/mysource/branch_4.2.x > svn: E120171: 执行上下文错误: An error occurred during SSL…...

Limesurvay系统“48核心92GB服务器”优化方案

1、Redis maxmemory 16GB # 限制Redis内存&#xff08;预留足够空间给其他服务&#xff09; maxmemory-policy volatile-lru # 自动淘汰旧会话&#xff08;仅对带TTL的键&#xff09; save 300 100 # 仅保留一个条件减少阻塞 stop-writes-on-bgsave-error no #…...

DockerFile实战

背景 在上一篇文章中&#xff0c;我们对DockerFile有了一个较为深刻的认识&#xff0c;那么这篇文章&#xff0c;我将会向你展示如何自定义一个镜像并且在docker上运行。 一、基础指令 指令技术说明生产环境最佳实践典型错误示例​FROM​- 必须作为Dockerfile第一条指令 - 推…...

【Linux】简易版Shell实现(附源码)

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;Linux 前言 之前我们学习了Linux的进程概念以及进程控制相关接口&#xff1a; 【Linux】进程控制-CSDN博客 本篇文章&#xff0c;我们将一起踏上一段有趣的旅程&a…...

MATLAB安装常见问题解决方案

目前新版本的matlab安装往往需要十几G的本地安装容量&#xff0c;例如matlab2022b、matlab2023b, 首先就是要保证本地硬盘空间足够大&#xff0c;如果没有足够的本地内存空间&#xff0c;那么可以尝试释放本地硬盘空间&#xff0c;或者安装所需内存空间较小的旧版本的matlab&am…...

在 Vue 中插入 B 站视频

前言 在 Vue 项目中&#xff0c;有时我们需要嵌入 B 站视频来丰富页面内容&#xff0c;为用户提供更直观的信息展示。本文将详细介绍在 Vue 中插入 B 站视频的多种方法。 使用<iframe>标签直接嵌入,<iframe>标签是一种简单直接的方式&#xff0c;可将 B 站视频嵌…...

【深度学习】#12 计算机视觉

主要参考学习资料&#xff1a; 《动手学深度学习》阿斯顿张 等 著 【动手学深度学习 PyTorch版】哔哩哔哩跟李沐学AI 目录 目标检测锚框交并比&#xff08;IoU&#xff09;锚框标注真实边界框分配偏移量计算损失函数 非极大值抑制预测 多尺度目标检测单发多框检测&#xff08;S…...

QT学习3

QT项目视图 1、List View清单视图 private:QListView *listview1; private slots:void slotClickedFunc(const QModelIndex &index); #include "widget.h" #include "ui_widget.h"#include <QStringListModel>//字符串列表模型 #include <QS…...

Vue 3 动态 ref 的使用方式(表格)

一、问题描述 先给大家简单介绍一下问题背景。我正在开发的项目中&#xff0c;有一个表格组件&#xff0c;其中一列是分镜描述&#xff0c;需要支持视频上传功能。用户可以为每一行的分镜描述上传对应的视频示例。然而&#xff0c;在实现过程中&#xff0c;出现了一个严重的问…...

FAST-DDS源码分析PDP(一)

准备开一个FAST-DDS源码分析系列&#xff0c;源码版本FAST-DDS 1.1.0版本。 FAST-DDS这种网络中间件是非常复杂的&#xff0c;所以前期先去分析每个类的作用是什么&#xff0c;然后在结合RTPS DOC&#xff0c;FAST-DDS DEMO,以及FAST-DDS的doc去串起来逻辑。 Builtin Discovery…...

Flutter与Kotlin Multiplatform(KMP)深度对比及鸿蒙生态适配解析

Flutter 与 Kotlin Multiplatform&#xff08;KMP&#xff09;深度对比及鸿蒙生态适配解析 在跨平台开发领域&#xff0c;Flutter 与 Kotlin Multiplatform&#xff08;KMP&#xff09;代表了两种不同的技术路线&#xff1a;前者以 “统一 UI 体验” 为核心&#xff0c;后者以…...

深入了解linux系统—— 基础IO(上)

文件 在之前学习C语言文件操作时&#xff0c;我们了解过什么是文件&#xff0c;这里简单回顾一下&#xff1a; 文件存在磁盘中&#xff0c;文件有分为程序文件、数据文件&#xff1b;二进制文件和文本文件等。 详细描述见文章&#xff1a;文件操作——C语言 文件在磁盘里&a…...

C++ map multimap 容器:赋值、排序、大小与删除操作

概述 map和multimap是C STL中的关联容器&#xff0c;它们存储的是键值对(key-value pairs)&#xff0c;并且会根据键(key)自动排序。两者的主要区别在于&#xff1a; map不允许重复的键multimap允许重复的键 本文将详细解析示例代码中涉及的map操作&#xff0c;包括赋值、排…...

EmuEdit

EmuEdit详解&#xff1a;统一多任务图像编辑的扩展性范式 引言&#xff1a;图像编辑的困境 近年来&#xff0c;扩散模型&#xff08;Diffusion Models&#xff09;在图像合成和编辑方面取得了巨大进展&#xff0c;如 Prompt-to-Prompt (P2P)、InstructPix2Pix、DiffEdit 等方法…...

Linux编译rpm包与deb包

注意&#xff1a; 本文内容于 2025-05-14 23:55:53 创建&#xff0c;可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容&#xff0c;请访问原文地址&#xff1a;编译rpm包与deb包。感谢您的关注与支持&#xff01; 近期在通过源码编译安装一些软件包时&#…...

GitHub 趋势日报 (2025年05月17日)

本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1TapXWorld/ChinaTextbookPDF教材。⭐ 2471⭐ 22302Roff2public-apis/public-a…...

[创业之路-362]:企业战略管理案例分析-3-战略制定-华为使命、愿景、价值观的演变过程

一、华为使命、愿景、价值观的演变过程 1、创业初期&#xff08;1987 - 1994 年&#xff09;&#xff1a;生存导向&#xff0c;文化萌芽 使命愿景雏形&#xff1a;1994年华为提出“10年之后&#xff0c;世界通信行业三分天下&#xff0c;华为将占一份”的宏伟梦想&#xff0c…...

Android 性能优化入门(二)—— 内存优化

1、概述 1.1 Java 对象的生命周期 各状态含义&#xff1a; 创建&#xff1a;分配内存空间并调用构造方法应用&#xff1a;使用中&#xff0c;处于被强引用持有&#xff08;至少一个&#xff09;的状态不可见&#xff1a;不被强引用持有&#xff0c;应用程序已经不再使用该对象…...

(5)python爬虫--BeautifulSoup(bs4)

文章目录 [TOC](文章目录) 前言一、安装bs4二、bs4的基础使用2.1 创建soup对象2.2 根据标签名查找节点2.3 根据函数来查找节点1. find函数2. find_all函数3. select函数 三、使用bs4获取节点信息3.1 获取节点内容3.2 获取节点的属性3.3 获取节点的属性值 四、测试练习 总结 前言…...

如何利用DeepSeek提升工作效率

1. 代码开发辅助 1.1 代码生成 根据需求描述生成代码框架 自动补全代码片段 生成单元测试用例 创建项目文档 1.2 代码优化 代码重构建议 性能优化方案 最佳实践推荐 设计模式应用 2. 问题诊断与解决 2.1 错误分析 编译错误解析 运行时错误诊断 内存泄漏检测 性…...

游戏引擎学习第292天:实现蛇

每次VLC 读取OSD 会有bug 修复一下 回顾并计划实现一种漂浮的移动方式&#xff0c;并制作一个贪吃蛇 虽然不完全记得之前具体计划&#xff0c;但感觉是想实现一个小蛇形生物&#xff0c;之前一直没来得及做。我们还打算让熟悉的伙伴能漂浮移动&#xff0c;所以今天会继续进行一…...

菱形继承原理

在C中&#xff0c;菱形继承的内存模型会因是否使用虚继承产生本质差异。我们通过具体示例说明两种场景的区别&#xff1a; 一、普通菱形继承的内存模型 class A { int a; }; class B : public A { int b; }; class C : public A { int c; }; class D : public B, public C { i…...

C++编程起步项目

员工信息管理系统 需求 Employee.h #pragma once#include<iostream> #include<string>using namespace std;class Employee { public:int id; // 编号string name; // 姓名string position; // 岗位int deptId; // 部门编号Employee();Employee(int id, string n…...

c++编写中遇见的错误

目录 一.获取动态数组的长度二.编译错误三、内存泄露 一.获取动态数组的长度 首先想到获取数组的长度的代码是&#xff1a; sizeof(arr) / sizeof(arr[0]);但是当将其使用到动态数组上时就会产生错误&#xff1b; int* help new int[3];for (int i 0; i < 3; i) {help[…...

股票数据源对接技术指南:印度尼西亚、印度、韩国

一、多国数据对接全景图 1. 核心数据领域对比 国家金融市场数据源宏观经济指标特色数据资源印度NSE/BSE实时行情RBI经济统计库UPI支付数据/GST税务记录印尼IDX交易所数据流BPS官方统计棕榈油产业数据/群岛物流信息韩国KRX综合指数KOSTAT国家统计K-POP消费趋势/半导体出口数据…...

常见面试题:Webpack的构建流程简单说一下。

文章目录 前言一、Webpack 的核心使命&#xff1a;模块化打包二、Webpack 构建流程详解三、构建流程的可视化演示项目结构构建流程图 四、构建流程中的关键技术点1. 依赖图的构建与优化2. 哈希与缓存策略3. 开发环境优化 五、简易版概括构建流程 总结 前言 在前端工程化中&…...