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

5 C 程序全流程解析:编写、预处理、编译、汇编、链接、运行与 GCC 指令详解

C 程序运行机制流程概述

        通过以上步骤,我们可以将一个 C 语言源代码文件逐步转换为一个可执行的二进制程序。这一过程涉及多个关键工具和步骤,每一步都承担着特定的任务,发挥着独特的作用。深入理解这些步骤,不仅有助于我们更好地掌握 C 语言编程的精髓,还能让我们对软件开发的基本原理有更透彻的认识。

        接下来,我将对这些步骤进行逐一细致的讲解,帮助大家更好地理解和应用。

1.1 编写代码

        首先,我们需要使用 C 语言编写源程序代码,并将其保存到磁盘文件中。

        源代码文件通常以 “.c” 作为扩展名。例如,我们创建了一个名为 main.c 的文件,内容如下:

#include <stdio.h>int main()
{printf("Hello World");return 0;
}

1.2 预处理

        预处理是编译过程的第一步,由预处理器对源代码文件进行处理

        预处理的主要任务:

  • 去除多余的空格和注释,使代码更简洁
  • 处理预处理指令(如 #include、#define 等)。例如,#include <stdio.h> 会将标准输入输出库的头文件内容插入到代码中。
  • 生成一个经过处理的源代码文件,通常以 .i 作为扩展名。例如,main.c 经过预处理后会生成 main.i 文件。

        预处理确保了代码的一致性和可移植性,为后续编译做好准备。

1.3 编译

        编译是将预处理后的源代码(.i 文件)转换为汇编代码的过程。汇编代码是一种低级语言,与机器码非常接近。

        编译过程:

  • 编译器读取预处理后的文件(如 main.i),并将其翻译为汇编代码
  • 生成的汇编代码文件通常以 .s.asm 作为扩展名。例如,main.i 经过编译后会生成 main.s 文件。

        编译是将高级语言(如 C 语言)转换为低级语言的关键步骤,使代码能够在特定的硬件平台上运行。

1.4 汇编

        汇编是将汇编代码转换为机器码的过程机器码是计算机可以直接执行的二进制指令

        汇编过程:

  • 汇编器读取汇编代码文件(如 main.s),并将其翻译为机器码
  • 生成的目标文件是二进制文件,通常以 .o(在 Unix-like 系统上)或 .obj(在 Windows 上)作为扩展名。例如,main.s 经过汇编后会生成 main.o 或 main.obj 文件。

        汇编过程将汇编语言转换为机器语言,使代码能够在计算机上直接执行。

1.5 链接

        链接是将多个目标文件(如 main.o)与库文件(如 C 标准库)合并,生成最终的可执行文件的过程

        链接过程:

  • 链接器读取目标文件和库文件,解析它们之间的依赖关系
  • 库文件由系统提供,包含标准函数和数据结构(如 <stdio.h> 中的 printf 函数)。
  • 生成的最终可执行文件在 Windows 上通常以 .exe 作为扩展名,在 Unix-like 系统上则没有扩展名(如 a.out 自定义名称

        链接过程确保了程序能够正确调用库函数,并生成一个完整的可执行文件。

1.6 运行

        运行是执行生成的可执行文件,验证程序的正确性和功能性的过程。

        运行过程:

  • 在命令行或终端中运行可执行文件(如 ./a.outmain.exe .\main.exe)。
  • 程序输出结果(如 Hello World),验证其是否按预期工作。

        运行过程是开发周期的最后一步,确保程序能够正确完成其功能。

1.7 流程总结

步骤文件名描述
1. 编写代码main.c使用 C 语言编写源代码,并保存为 .c 文件。
2. 预处理main.i预处理器处理源代码,去除注释和空格,处理预处理指令,生成 .i 文件
3. 编译main.s / main.asm编译器将预处理后的代码翻译成汇编代码,生成 .s 或 .asm 文件
4. 汇编main.o / main.obj汇编器将汇编代码翻译成机器码,生成目标文件 .o(Unix-like)或 .obj(Windows)
5. 链接main.exe / 可执行文件链接器将目标文件和库文件合并,生成最终的可执行文件(如 .exe 或无扩展名的可执行文件)
6. 运行无特定文件名执行生成的可执行文件,验证程序功能。

2 C 程序运行机制流程演示

        在通常的开发环境中,运行 C 源文件时,编译过程中产生的中间文件通常不会被保存,只会生成最终的可执行二进制程序(.exe 文件)。

        然而,为了更深入地了解编译过程并保留中间文件,我们可以使用命令行工具(如终端)来手动执行预处理、编译、汇编和链接等步骤。

        以下是具体步骤:

2.1 打开命令行终端

        我们将使用 VS Code 的集成终端作为命令行工具。如下图所示,打开 VS Code 的终端工具,以便我们可以输入和执行各种命令。

2.2 预处理指令示例

        在终端中输入以下命令并按回车键运行:

gcc -E main.c -o main.i
  • gcc:调用 GCC 编译器。
  • -E指示编译器只执行预处理步骤,而不进行编译、汇编和链接。预处理步骤包括去除注释、处理预处理指令(如 #include、#define 等)。
  • main.c:指定要处理的源代码文件。
  • -o main.i:指定预处理后输出文件的名称为 main.i。

        运行完成后,会生成 main.i 文件,这是经过预处理的源文件,如下图所示:

        如果省略了 -o main.i,GCC 会将预处理后的输出默认打印到标准输出(通常是终端),而不是保存到文件中。具体来说:

  • 默认行为:预处理后的代码会被输出到终端窗口,而不是保存为文件。
  • 不便之处
    • 你无法直接保存预处理后的代码供后续步骤(如编译、汇编)使用。
    • 如果预处理后的代码很长,终端窗口可能无法完整显示。
    • 不便于自动化处理,因为输出没有保存到文件中。

        通过查看 main.i 文件,可以发现其中包含了大量标准库头文件的内容,例如 stdio.h。在原始的 .c 源文件中,这些内容仅通过 #include 指令进行引用。经过预处理后,这些头文件的内容被直接插入到 .i 文件中,因此导致文件大小显著增加

 2.3 编译指令示例

        在终端中输入以下命令并按回车键运行:

gcc -S main.i -o main.s
  • gcc:调用 GCC 编译器。
  • -S指示编译器只执行到汇编步骤,而不进行后续的汇编和链接。这意味着编译器会将预处理后的代码(.i 文件)翻译成汇编代码。
  • main.i:指定要处理的输入文件,即预处理后的文件。
  • -o main.s:指定输出文件的名称为 main.s,即汇编代码文件。

        运行完成后,会生成 main.s 文件,这是汇编文件,如下图所示:

        如果省略了 -o main.s,GCC 会将生成的汇编代码默认输出到一个名为 main.s 的文件中,但这个默认行为取决于输入文件的名称。具体来说:

  • 默认行为:如果输入文件名是 main.i,那么默认情况下,生成的汇编代码会被保存到 main.s 文件中。
  • 灵活性:省略 -o 选项时,输出文件名是基于输入文件名自动生成的,这可能会在某些情况下导致文件名冲突或不符合预期。
  • 明确性:使用 -o 选项可以明确指定输出文件名,避免任何潜在的混淆或错误。

2.4 汇编指令示例

        在终端中输入以下命令并按回车键运行:

gcc -c main.s -o main.o
  • gcc:调用 GCC 编译器。
  • -c指示编译器只执行到汇编后的目标文件生成步骤,而不进行后续的链接。这意味着编译器会将汇编代码(.s 文件)翻译成目标文件(.o 文件)。
  • main.s:指定要处理的输入文件,即汇编代码文件。
  • -o main.o:指定输出文件的名称为 main.o,即目标文件。 

        运行完成后,会生成 main.o 文件,这是目标文件,如下图所示:

        如果省略了 -o main.o,GCC 会将生成的目标文件默认输出到一个基于输入文件名自动生成的文件中。具体来说:

  • 默认行为:如果输入文件名是 main.s,那么默认情况下,生成的目标文件会被保存到 main.o 文件中。
  • 灵活性:省略 -o 选项时,输出文件名是基于输入文件名自动生成的,这可能会在某些情况下导致文件名冲突或不符合预期。
  • 明确性:使用 -o 选项可以明确指定输出文件名,避免任何潜在的混淆或错误。

2.5 链接指令示例

        在终端中输入以下命令并按回车键运行:

gcc main.o -o main.exe
  • gcc:调用 GCC 编译器。
  • main.o指定要处理的目标文件,即经过汇编步骤生成的中间文件。
  • -o main.exe:指定输出文件的名称为 main.exe,即可执行文件。 

        运行完成后,会生成 main.exe 文件,这是最终的可执行文件,如下图所示:

        如果省略了 -o main.exe,GCC 会将生成的可执行文件默认输出到一个名为 a.out 的文件中(在 Unix-like 系统上,如 Linux 和 macOS)。在 Windows 系统上,默认的可执行文件名可能是 a.exe,但这取决于具体的 GCC 配置

  • 默认行为
    • 在 Unix-like 系统上,省略 -o 选项时,生成的可执行文件会被保存到 a.out 文件中。
    • 在 Windows 系统上,生成的可执行文件可能会被保存到 a.exe 文件中。
  • 灵活性:省略 -o 选项时,输出文件名是固定的,这可能会在某些情况下导致文件名冲突或不符合预期。
  • 明确性:使用 -o 选项可以明确指定输出文件名,避免任何潜在的混淆或错误。

        如果在使用 gcc main.o -o main 命令时省略了输出文件的后缀名,GCC 会根据系统的默认行为来决定生成的可执行文件的名称和类型

  1. Unix-like 系统(如 Linux 和 macOS)
    • 省略后缀名时,GCC 会生成一个名为 main 的可执行文件。在 Unix-like 系统上,可执行文件不需要特定的后缀名,系统通过文件的权限和属性来识别可执行文件。
    • 你可以通过 ./main 来运行生成的可执行文件。
  2. Windows 系统
    • 在 Windows 系统上,省略后缀名可能会导致混淆,因为 Windows 通常通过文件后缀名来识别文件类型。
    • 在 Windows 上,如果是在类似 Unix 的环境下(如 Cygwin 或 MinGW),它也可能没有扩展名,但如果直接从命令提示符 cmd 或 PowerShell 运行,可能需要指定 .exe 扩展名或使用关联程序来运行它)。
    • 请注意,在 Windows 的某些配置中(特别是当 GCC 被配置为生成 Windows 可执行文件时),即使没有指定 .exe 扩展名,GCC 也可能会自动添加它,但这不是跨平台的做法
    • 为了避免混淆和确保兼容性,建议在 Windows 上也使用 .exe 后缀名。

2.6 运行指令示例

        在终端中输入以下命令并按回车键运行:

./main.exe  或 .\main.exe 

        在 Windows 的 PowerShell 中,./main.exe 和 .\main.exe 实际上是等效的,都可以用来执行当前目录下的可执行文件。这种差异主要源于不同操作系统和 shell 的惯例,但在 PowerShell 中,它们被同样地处理。 

  1. ./main.exe
    • 这种形式更常见于类 Unix 系统(如 Linux 和 macOS)的 shell(如 bash、zsh 等)。在这些系统中,. 表示当前目录,./ 则明确指定了当前目录下的文件
    • 在 PowerShell 中,虽然 ./ 不是传统上用于指定当前目录的前缀,但 PowerShell 解释器足够智能,能够识别并处理这种形式,将其视为与 .\ 相同。
  2. .\main.exe
    • 这是 PowerShell 中更常见的形式,用于指定当前目录下的可执行文件。
    • .\ 明确指示 PowerShell 在当前目录中查找并执行名为 main.exe 的可执行文件
  3. 建议
    • 在 PowerShell 中,建议使用 .\ 来指定当前目录下的可执行文件,因为这是 PowerShell 的原生和首选形式。
    • 虽然 ./ 在 PowerShell 中也能工作,但为了避免混淆和潜在的兼容性问题(特别是在跨平台脚本中),最好坚持使用 PowerShell 的惯例。

        输入执行命令后,这会执行 main.exe 文件,终端中会显示 “Hello World”。

        在使用 VS Code 开发 C/C++ 程序时,编译生成的可执行文件(如 main.exe)可能无法直接在终端中运行,出现类似以下的错误信息: 

错误原因

  1. 路径问题
    • 当你输入 main.exe 时,PowerShell 会在系统的环境变量 PATH 中指定的目录中查找这个可执行文件,而不是在当前工作目录中查找
    • 如果 main.exe 不在 PATH 中的任何目录中,PowerShell 就会抛出 CommandNotFoundException,提示找不到命令。
  2. 当前目录的特殊性
    • 在 PowerShell 中,当前目录(.)默认不在 PATH 中,这是出于安全考虑,防止执行当前目录下的恶意脚本或可执行文件。

解决方案

  1. 使用相对路径

    • 在当前目录下运行可执行文件时,使用 .\main.exe,其中 .\ 表示当前目录
    • 这样做可以明确告诉 PowerShell 在当前目录中查找 main.exe。
  2. 修改 PowerShell 配置(不推荐)

    • 理论上,你可以通过修改 PowerShell 的配置来将当前目录添加到 PATH 中,但这通常不推荐,因为它会降低系统的安全性。

3 GCC 常用指令

        GCC(GNU Compiler Collection)是 GNU 项目开发的编程语言编译器集合,广泛用于 C、C++ 等多种编程语言的编译。以下是 GCC 在 C 语言编译过程中常用的指令,以及一些其他实用的指令。

3.1 各阶段单独使用的指令

预处理阶段:gcc -E main.c -o main.i-E:指示 GCC 只执行预处理步骤生成预处理后的源代码文件(通常以 .i 为扩展名)编译阶段:gcc -S main.i -o main.s-S:指示 GCC 将预处理后的源代码编译成汇编代码生成汇编代码文件(通常以 .s 或 .asm 为扩展名)汇编阶段:gcc -c main.s -o main.o-c:指示 GCC 将汇编代码汇编成目标文件在 Unix-like 系统上通常为 .o 文件在 Windows 上通常为 .obj 文件链接阶段:gcc main.o -o executable无特定选项,GCC 默认执行链接步骤,将目标文件与必要的库文件合并,生成最终的可执行文件在 Windows 上通常为 .exe 文件在 Unix-like 系统上可能没有扩展名

3.2 一次到位的编译指令 

        为了方便起见,GCC 也支持一次到位的编译指令,即从源代码直接生成可执行文件,无需手动执行每个阶段的指令。

gcc source.c -o executable
  • source.c指定要编译的源代码文件
  • -o executable指定输出可执行文件的名称。如果省略,GCC 将生成一个默认名称的可执行文件(如 a.out 或 a.exe)。

3.3 其他常用指令

查看 GCC 版本:

gcc --version

优化编译:

gcc -O2 source.c -o executable
  • -O2:启用第二级优化,可以生成更快、更小的可执行文件。GCC 还支持 -O0(无优化,默认)、-O1(第一级优化)、-O3(第三级优化,通常比 -O2 更激进)等选项。

生成调试信息:

gcc -g source.c -o executable
  • -g:生成调试信息,使得生成的可执行文件可以使用调试器(如 GDB)进行调试。

指定包含目录:

gcc -I/path/to/include source.c -o executable
  • -I:指定额外的包含目录,GCC 将在这些目录中查找头文件。

指定库文件目录:

gcc -L/path/to/lib source.c -o executable -lmylib
  • -L:指定额外的库文件目录,GCC 将在这些目录中查找库文件。
  • -lmylib:链接名为 libmylib.a 或 libmylib.so 的库文件。

相关文章:

5 C 程序全流程解析:编写、预处理、编译、汇编、链接、运行与 GCC 指令详解

1 C 程序运行机制流程概述 通过以上步骤&#xff0c;我们可以将一个 C 语言源代码文件逐步转换为一个可执行的二进制程序。这一过程涉及多个关键工具和步骤&#xff0c;每一步都承担着特定的任务&#xff0c;发挥着独特的作用。深入理解这些步骤&#xff0c;不仅有助于我们更好…...

leetcode:1351. 统计有序矩阵中的负数(python3解法)

难度&#xff1a;简单 给你一个 m * n 的矩阵 grid&#xff0c;矩阵中的元素无论是按行还是按列&#xff0c;都以非严格递减顺序排列。 请你统计并返回 grid 中 负数 的数目。 示例 1&#xff1a; 输入&#xff1a;grid [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]] 输…...

hive数仓要点总结

1.OLTP和OLAP区别 OLTP&#xff08;On-Line Transaction Processing&#xff09;即联机事务处理&#xff0c;也称为面向交易的处理过程&#xff0c;其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理&#xff0c;并在很短的时间内给出处理结果&#xff0c;是对用…...

LeetCode[541]反转字符串Ⅱ

思路&#xff1a; 题目给我们加了几个规则&#xff0c;剩余长度小于2k&#xff0c;大于等于k就反转k个&#xff0c;小于k就全部反转&#xff0c;我们按照这个逻辑来就行。 第一就是大于等于k就反转k个&#xff0c;我们for循环肯定是i2k了&#xff0c;接下来就是判断是否大于等于…...

瑞幸微RK系列平台的YOLO部署(上篇)

&#x1f387;环境配置 &#x1f389;前言 部署的第一步是对环境的配置&#xff0c;不同的平台的平台需要依赖的环境不同&#xff0c;之前在英伟达的Jetson系列部署过&#xff0c;其主要是需要配置CUDA和CUDNN的环境&#xff0c;需要加速推理的话可能还需要TensorRT的环境。 …...

HarmonyOS:页面滚动时标题悬浮、背景渐变

一、需求场景 进入到app首页或者分页列表首页时&#xff0c;随着页面滚动&#xff0c;分类tab要求固定悬浮在顶部。进入到app首页、者分页列表首页、商品详情页时&#xff0c;页面滚动时&#xff0c;顶部导航栏&#xff08;菜单、标题&#xff09;背景渐变。 二、相关技术知识点…...

无人设备遥控器之安全防护与预警篇

无人设备遥控器的安全防护与预警是保障无人机、无人船、无人车等无人系统安全运行的关键环节。随着无人设备在农业、测绘、物流、安防等领域的广泛应用&#xff0c;其遥控器的安全性与可靠性显得尤为重要。 一、安全防护 1. 物理安全防护 外壳防护&#xff1a;采用防水、防尘…...

win10win11启用组策略编辑器

今天发现家庭版的win11系统没有组策略编辑器&#xff0c; 桌面新建txt文件&#xff0c;打开 编写以下脚本&#xff1a; echo off pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >Li…...

谷歌浏览器的开发者模式如何开启及安装教程

在谷歌浏览器&#xff08;Google Chrome&#xff09;中开启开发者模式并安装扩展程序&#xff08;如未上架商店的插件或自定义扩展&#xff09;的步骤如下&#xff1a; 一、开启开发者模式 打开扩展管理页面 在浏览器地址栏输入&#xff1a;chrome://extensions/ 或通过菜单进入…...

WebRTC实时通话EasyRTC嵌入式音视频通信SDK,构建智慧医疗远程会诊高效方案

一、方案背景 当前医疗领域&#xff0c;医疗资源分布不均问题尤为突出&#xff0c;大城市和发达地区优质医疗资源集中&#xff0c;偏远地区医疗设施陈旧、人才稀缺&#xff0c;患者难以获得高质量的医疗服务&#xff0c;制约医疗事业均衡发展。 EasyRTC技术基于WebRTC等先进技…...

C++性能优化实战:从瓶颈定位到高并发架构重构(第一章)

在高并发编程的世界中,性能瓶颈往往潜伏在代码的深处,悄无声息地吞噬着系统的吞吐量。想象一下,你正在开发一个游戏服务器,需要在每毫秒内为数千名玩家分配和释放内存,任何微小的延迟都可能导致玩家体验的崩塌。你是否曾遇到过这样的困惑:增加了线程数,期待性能翻倍,结…...

Terraform 迷思:当优雅的模块 terraform-aws-eks 与现实碰撞

大家好&#xff0c;今天想和大家聊聊一个可能很多技术人都经历过的场景——面对看似完美的工具或代码库&#xff0c;却陷入意想不到的困境&#xff0c;甚至开始有点怀疑人生的时刻。 启程&#xff1a;雄心勃勃的 EKS 模块优化 故事的开端往往充满希望。就像我今天&#xff0…...

路由器端口映射的意思、使用场景、及内网ip让公网访问常见问题和解决方法

一、端口映射是什么意思 端口映射是将内网主机的IP地址端口映射到公网中&#xff0c;内部机器提供相应的互联网服务。当异地用户访问该这个端口时&#xff0c;会自动将请求映射到对应局域网内部的机器上。 二、端口映射常见使用场景 1&#xff0c;远程访问需求。当有…...

【MySQL 数据库】增删查改操作CRUD(下)

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 目录 1. 聚合函数 1.1 常见聚合函数 1.1.1 COUNT 1.1.2 SUM 1.1.3 AVG 1.1.4 MAX 2. Group by 分组 2.1 分组示例 3. having 语句 3.1 having 过滤结果 3…...

Android 日志输出模块

Android 日志输出模块 本文主要记录下封装的日志输出模块. 1: 主要功能 日志模块初始化,并设置日志级别支持将日志写入文件日志文件单个限制200M,按天记录到指定文件,文件达到阈值后,记录新的日志文件.支持导出日志文件zip. 2: 具体实现 日志整体初始化使用静态内部类的方式…...

群辉搭建静态网站

写在前面&#xff0c;本文章主要是记录自己搭建过程以备后来需要时温习下&#xff01; 1.安装并打开web station 2. 2.打开 File Station 找到web文件夹 把静态导航网站的代码下载下来&#xff0c;并上传到上面 web 文件夹下 3. 在Web Station 套件里面&#xff0c;在网页服…...

51单片机波特率与溢出率的关系

1. 波特率与溢出率的基本关系 波特率(Baud Rate)表示串口通信中每秒传输的位数(bps),而溢出率是定时器每秒溢出的次数。在51单片机中,波特率通常通过定时器的溢出率来生成。 公式关系: 波特率=溢出率/​分频系数 其中,分频系数与定时器的工作模…...

数据库原理及应用mysql版陈业斌实验三

&#x1f3dd;️专栏&#xff1a;Mysql_猫咪-9527的博客-CSDN博客 &#x1f305;主页&#xff1a;猫咪-9527-CSDN博客 “欲穷千里目&#xff0c;更上一层楼。会当凌绝顶&#xff0c;一览众山小。” 目录 实验三多表查询 1.实验数据如下 student 表&#xff08;学生表&#…...

Python 二分查找(bisect):排序数据的高效检索

二分查找&#xff1a;排序数据的高效检索 第二天清晨&#xff0c;李明早早来到了图书馆。今天他的研究目标是bisect模块&#xff0c;特别是其中的bisect_left和bisect_right函数。这些函数实现了二分查找算法&#xff0c;用于在已排序的序列中高效地查找元素或确定插入位置。 …...

ClickHouse

ClickHouse说明 ClickHouse是一种高性能、分布式的开源列式数据库管理系统&#xff08;DBMS&#xff09;&#xff0c;专门用于在线分析处理&#xff08;OLAP&#xff09;工作负载。是俄罗斯的 Yandex 公司于 2016 年开源的列式存储数据库&#xff0c;使用 C 语言编写。ClickHou…...

【Linux生成SSH秘钥实现远程连接】Linux生成SSH秘钥对与修改服务配置文件实现无密码远程连接

文章目录 前言1. Linux 生成SSH秘钥对2. 修改SSH服务配置文件3. 客户端秘钥文件设置4. 本地SSH私钥连接测试5. Linux安装Cpolar工具6. 配置SSHTCP公网地址7. 远程SSH私钥连接测试8. 固定SSH公网地址9. 固定SSH地址测试 前言 在数字化江湖中&#xff0c;企业对各种技术的需求就…...

中间件--ClickHouse-4--向量化执行(什么是向量?为什么向量化执行的更快?)

1、向量&#xff08;Vector&#xff09;的概念 &#xff08;1&#xff09;、向量的定义 向量&#xff1a;在计算机科学中&#xff0c;向量是一组同类型数据的有序集合&#xff0c;例如一个包含多个数值的数组。在数据库中&#xff0c;向量通常指批量数据&#xff08;如一列数…...

conda导出环境以及安装环境

1. 导出环境 1.1导出完整的环境配置&#xff08;包含精确版本和平台信息&#xff09;&#xff1a; conda env export > /path/to/your/directory/environment.yml1.2 导出不含平台信息的配置&#xff08;更适合跨平台共享&#xff09;&#xff1a; conda env export --no…...

Mysql数据库基本操作-DML

有基础的可以直接看总结里面的思维导图 简单来说就是增删改 一、Mysql数据库基本操作-DML-insert-数据插入 如果写上列和值&#xff0c;那么相应的列要对应相应的值&#xff0c;而且列的类型要和值的类型相同 格式1&#xff1a;insert into 表&#xff08;列名&#xff09; v…...

html:文件上传-一次性可上传多个文件,将文件展示到页面(可删除

一、原始上传样式 1、效果 2、完整代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" cont…...

计算机网络(第四章)

网络层 一、网络层提供的两种服务 虚电路 &#xff1a;虚电路是一种在通信开始之前建立连接的方式。它类似于电话通话&#xff0c;双方在通话前要建立连接&#xff1b;数据报 &#xff1a;数据报是一种无连接的通信方式。每个数据包&#xff08;数据报&#xff09;独立地发送…...

【PostgreSQL教程】PostgreSQL 特别篇之 语言接口连接PHP

博主介绍:✌全网粉丝22W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。 感兴趣的可…...

Java学习——day30(Lambda表达式与 StreamAPI)

文章目录 1. Lambda 表达式1.1 概述1.2 应用场景1.3 示例代码 2. Stream API2.1 概述2.2 基本组成2.3 示例代码 3.练习3.1 .练习初级&#xff1a;3.2 中级&#xff1a;3.3 高级&#xff1a; 4.总结与应用4.1 Lambda 表达式4.2 Stream API 1. Lambda 表达式 1.1 概述 定义&…...

mysql no space left on device

文章目录 1. 查看磁盘使用情况2. 清理 /tmp 目录3. 调整 MySQL 临时文件目录4. 增加磁盘空间5. 优化数据库操作 我在执行 MySQL 的 UPDATE 语句时遇到 error writing file /tmp/*** no space left on device 错误&#xff0c;这表明 MySQL 临时文件存储目录 /tmp 空间不足。以下…...

异步编程——微信小程序

1. 前言 引用来自&#xff1a;微信小程序开发中的多线程处理与异步编程_微信小程序 多线程-CSDN博客 微信小程序是基于JavaScript开发的&#xff0c;与浏览器JavaScript不同&#xff0c;小程序运行在WebView内部&#xff0c;没有多线程的概念。小程序的 JavaScript 是单线程的…...

聊透多线程编程-线程池-8.C# 线程互斥实现方式

目录 1. 锁机制 (Locking Mechanisms) (1) lock 关键字 (2) Monitor 类 2. 跨进程互斥机制 3. 信号量机制 (1) Semaphore 和 SemaphoreSlim 4. 读写锁机制 (1) ReaderWriterLockSlim 5. 原子操作机制 (1) Interlocked 类 6. 自旋锁机制 (1) SpinLock 线程互斥是一种…...

渗透测试学习-概述

1.渗透测试 渗透测试( Penetration Testing &#xff09;是指受信任的第三方通过模拟黑客的攻击技术与手段对目标网络、系统进行攻击测试&#xff0c;发现目标的安全隐患并给出安全加固建议的一种安全测试与评估方法。 具体来讲&#xff0c;渗透人员在不同的位置&#xff08;…...

一键解锁Landsat 9地表温度计算!ENVI与ArcGIS Pro全流程详解(无需NASA大气校正)

为什么选择Landsat 9的L2SP数据&#xff1f; 之前&#xff1a;《ArcGIS与ENVI——基于landsat与Modis影像的遥感技术的生态环境质量评价》&#xff0c;基于Landsat前期的产品计算温度反演数据需要一系列复杂的步骤。 现在&#xff1a; Landsat 8-9的Collection 2 Level-2&…...

线代第七课:范德蒙德压缩

比如&#xff1a; 解析&#xff1a; 观看笔记来源&#xff1a; 《线性代数》教学视频 宋浩老师&#xff08;2024年更新&#xff09;...

Spark-SQL(一)

Spark SQL 概述 Spark SQL是Apache Spark用于处理结构化数据的模块 特点 1 易整合。无缝的整合了 SQL 查询和 Spark 编程 2 统一的数据访问。使用相同的方式连接不同的数据源 3 兼容 Hive。在已有的仓库上直接运行 SQL 或者 HQL 4 标准数据连接。通过 JDBC 或者 ODBC 来连…...

(自用)window防火墙关闭

自己老师忘了怎么关防火墙&#xff0c;导致每次都要重新找一遍&#xff0c;再下软件&#xff0c;所以写这篇 把这个地方打开可以看到被隔离的软件&#xff0c;然后点击还原即可使用了...

楼宇自控为建筑带来生机,具体表现在哪些方面?

在现代建筑领域&#xff0c;楼宇自控系统宛如一股清新的春风&#xff0c;为建筑赋予了蓬勃的生机与活力&#xff0c;从根本上改变了传统建筑的运行模式&#xff0c;使其朝着高效、智能、舒适的方向大步迈进。那么&#xff0c;楼宇自控究竟在哪些方面为建筑带来了如此显著的变化…...

asp.net Kestrel 和iis区别

Kestrel 和 IIS 都是用于托管 Web 应用程序的服务器&#xff0c;不过它们在多个方面存在显著差异&#xff0c;下面为你详细分析&#xff1a; 1. 所属平台与跨平台能力 Kestrel&#xff1a;是.NET Core 及后续版本的一部分&#xff0c;具备跨平台特性&#xff0c;可在 Windows…...

[原创](Modern C++)现代C++的关键性概念: 优雅地使用现代for循环语句

[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、C …...

【第42节】windows双机调试环境搭建和SEH原理剖析

目录 一、windows双机调试环境 1.1 双机调试是什么 1.2 准备工作 1.3 配置步骤 1.3.1 安装 VirtualKD 1.3.2 将target文件夹拷贝到虚拟机 1.3.3 在主机上使用vmmon64.exe监控虚拟机 二、SEH 原理剖析 2.1 TEB 与 FS 概述 2.2 手工注册 SEH 一、windows双机调试环境 …...

一文读懂WPF系列之控件模版数据模板

WPF控件模版数据模板 控件模板&#xff08;ControlTemplate&#xff09;定义方式内联定义&#xff08;直接写在ListBox中&#xff09;资源字典中定义定义方式区别 TemplateBinding 用法对比普通Binding的区别常见误区何时使用 数据模板&#xff08;DataTemplate&#xff09;定义…...

Java设计模式实战:装饰模式在星巴克咖啡系统中的应用

一、装饰模式简介 装饰模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构。这种模式创建了一个装饰类&#xff0c;用来包装原有的类&#xff0c;并在保持类方法签名完整性的前…...

L2TP实验(无图后补)

拓扑图 一、搭建拓扑并配置基础 IP 地址 设备选型与拓扑搭建&#xff1a;在 eNSP 中&#xff0c;拖入所需设备&#xff0c;包括 LAC&#xff08;L2TP Access Concentrator&#xff0c;L2TP 接入集中器 &#xff09;、LNS&#xff08;L2TP Network Server&#xff0c;L2TP 网络服…...

AT_abc398_e [ABC398E] Tree Game 题解

题目传送门 题目大意 题目描述 本题是一道交互题&#xff08;你的程序需要通过输入输出与评测系统进行交互&#xff09;。 给定一棵包含 N N N 个顶点的树 G G G&#xff0c;顶点编号为 1 1 1 至 N N N。第 i i i 条边连接顶点 U i U_i Ui​ 和 V i V_i Vi​。 你和…...

使用SVM对心脏数据是否患病进行分类预测

作者简介 杜嘉宝&#xff0c;男&#xff0c;西安工程大学电子信息学院&#xff0c;2024级研究生 研究方向&#xff1a;变压器故障预警与检测 电子邮件&#xff1a;djb857497378gmail.com 王子谦&#xff0c;男&#xff0c;西安工程大学电子信息学院&#xff0c;2024级研究生&a…...

作业帮前端面试题及参考答案 (100道面试题-上)

HTML5 的优势是什么? HTML5 作为 HTML 语言的新一代标准,具有众多显著优势,为现代网页开发带来了诸多便利与革新。 在语义化方面,HTML5 引入了大量具有明确语义的标签,如<header>、<nav>、<article>、<section>、<aside>、<footer>等…...

docker部署GPUStack【Nvidia版本】

以下是使用 Docker 部署 GPUStack 的步骤和注意事项 参考文章&#xff1a;https://docs.gpustack.ai/latest/installation/docker-installation/ 1. 前置条件 安装 Docker&#xff1a;确保已安装 Docker 引擎&#xff08;建议最新稳定版&#xff09;。NVIDIA 环境支持&#x…...

处理Long类型长度超长导致前端精度丢失问题

1&#xff0c;问题场景 后端返回的Long类型的数据&#xff0c;超10000000000000000&#xff0c;前端处理的时候&#xff0c;数据被截断了。比如tchId: 11073477511443988481&#xff0c; 前端根据tchId获取下一环节信息的时候&#xff0c;传的tchId变成了11073477511443988400&…...

突破亚马逊壁垒,Web Unlocker API 助您轻松获取数据

目录 一、Web Unlocker API简介二、开始使用Web Unlocker API1、首先进入控制台页面&#xff0c;点击左侧第一个tab键“代理 & 抓取基础设施”&#xff0c;找到“网页解锁器”&#xff0c;开始使用。2、进入网页解锁器页面后&#xff0c;填写通道名称&#xff0c;添加简短描…...

工业环境中的安全利器:如何挑选优质安全工具柜

工业生产的复杂环境里&#xff0c;安全工具柜可绝不是个简单的 “储物箱”&#xff0c;它是保障生产安全、提升工作效率的秘密武器。不管是电力维修车间里琳琅满目的绝缘工具&#xff0c;还是化工实验室里的精密仪器&#xff0c;安全工具柜都肩负着妥善收纳、保护的重任。那到底…...