Linux 入门:基础开发工具(上)vim,gcc/g++,make/makefile

目录

一.软件包管理器

一).软件包

二).安装软件

三).删除软件

二.编辑器vim

 一).vim的基本介绍

1.正常/普通/命令模式(Normal mode)

2.插入模式(Insert mode)

3.底行模式(last line mode)

二).vim的基本操作

1.进入文本

2.切换模式 

3.退出文本 

三). vim--正常模式--命令集

1.移动光标 

2.删除文字

3.复制-粘贴

4.替换

5. 撤销上⼀次操作

6.更改

7.跳至指定的行

四).vim--底行模式--命令集

1.列出行号

2.跳到文件中的某⼀行

3.查找字符

4.补充 

1).「: +  ! + 命令」

2).「: + %s+ / 当前文本内容 / 新内容 /」

3).「: +  vs+ 文件名」

 五).简单vim的配置

1.配置文件的位置

2.常用配置选项 

3.插件配置

三.编译器gcc/g++

一).背景知识

二).gcc编译选项

1.预处理(进行初步操作)

2.编译(生成汇编)

3.汇编(生成机器可识别代码) 

4.连接(生成可执行文件或库文件)

5.补充 

三).动态链接和静态链接

1.动态链接 

2.静态链接 

四).静态库和动态库

1.动静态库对比:

2.补充:

 四.自动化构建-make/Makefile

一).背景

二).理解

三).推导过程

​编辑


一.软件包管理器


一).软件包

  • 在Linux下安装软件, ⼀个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.
  • 但是这样太麻烦了, 于是有些人把⼀些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在⼀个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.
  • 软件包和软件包管理器, 就好比 "App" 和 "应用商店" 这样的关系.
  • yum(Yellow dog Updater, Modified)是Linux下非常常用的⼀种包管理器. 主要应用在Fedora,RedHat, Centos等发行版上.
  • Ubuntu:主要使用apt(Advanced Package Tool)作为其包管理器。apt同样提供了⾃动解决依赖关系、下载和安装软件包的功能 

二).安装软件

# Centos
$ sudo yum install  sl# Ubuntu
$ sudo apt install  sl虚拟机安装拓展软件源: yum install -y epel-realse

注意事项:

  • 安装软件时由于需要向系统目录中写入内容, ⼀般需要 sudo 或者切到 root 账户下才能完成.
  • yum/apt安装软件只能⼀个装完了再装另⼀个. 正在yum/apt安装⼀个软件的过程中, 如果再尝试用yum/apt安装另外⼀个软件, yum/apt会报错.
  • yum/apt 会⾃动找到都有哪些软件包需要下载, 这时候敲 "y" 确认安装.
  • 出现 "complete" 字样或者中间未出现报错, 说明安装完成.

三).删除软件

# Centos
sudo yum remove sl# Ubuntu
sudo apt remove sl

二.编辑器vim


 一).vim的基本介绍

讲解vim的三种模式(其实有好多模式,目前掌握这3种即可),分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下。

1.正常/普通/命令模式(Normal mode)

控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到last line mode

2.插入模式(Insert mode)

只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。

3.底行模式(last line mode)

文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。在命令模式下,*shift+:* 即可进入该模式。要查看你的所有模式:打开 vim,底行模式直接输入 :help vim-modes

 

二).vim的基本操作

1.进入文本

进⼊vim,在系统提⽰符号输⼊vim及⽂件名称后,就进⼊vim全屏幕编辑画⾯

2.切换模式 

进⼊vim之后,是处于[正常模式],你要切换到[插⼊模式]才能够输文字

[正常模式]切换⾄[插⼊模式]   按下「i」

[插⼊模式]切换⾄[正常模式]   处于[插⼊模式],就只能⼀直输⼊文字,如果发现输错了字,想用光标键往回移动,将该字删除,可以先按⼀下「ESC」键转到[正常模式]再删除文字。当然,也可以直接删除。

[正常模式]切换⾄[末⾏模式]   「shift + :」, 其实就是输⼊「:」

3.退出文本 

退出vim及保存文件,在[正常模式]下,按⼀下「:」冒号键进⼊「Last line mode」:

w (保存当前⽂件)

wq (输⼊「wq」,存盘并退出vim)

 q! (输⼊q!,不存盘强制退出vim)

shift + z + z(保存退出vim)

三). vim--正常模式--命令集

1.移动光标 

1.按「i」

按「i」切换进入插入模式「insert mode」,按“i”进⼊插⼊模式后是从光标当前位置开始输入⽂件;

2.按「a」

按「a」进⼊插入模式后,是从目前光标所在位置的下⼀个位置开始输入文字;

3.按「o」

按「o」进⼊插入模式后,是插⼊新的⼀行,从行首开始输入文字

4.按「shift + g」

移动到文章的最后

5.按「 shift + $(4) 」

移动到光标所在行的“行尾“

6.按「shift + ^(6)」

移动到光标所在行的“行首"

7.按[g + g]

进入到本文开始 

8. 按[shift+g]

进入文本末端

9.其他的命令 

  • 按「w」:以单词为单位,光标跳到下个字的开头

  • 按「e」:以单词为单位,光标跳到下个字的字尾

  • 按「b」:以单词为单位,光标回到上个字的开头

  • 按「#l」:光标移到该行的第#个位置,如:5l,56l

  • 按「ctrl」+「b」:屏幕往“后”移动一页

  • 按「ctrl」+「f」:屏幕往“前”移动一页

  • 按「ctrl」+「u」:屏幕往“后”移动半页

  • 按「ctrl」+「d」:屏幕往“前”移动半页

2.删除文字

1.按「x」

每按⼀次,删除光标所在位置的⼀个字符

2.按「d + d」

剪切或删除光标所在行

3.其他

  • 「#x」:例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符

  • 「X」:大写的X,每按⼀次,删除光标所在位置的“前面”⼀个字符

  • 「#X」:例如,「20 + shift + x」表示删除光标所在位置的“前面”20个字符

  • 「#dd」:从光标所在行开始删除#行

3.复制-粘贴

1.按「yy」

复制光标所在行到缓冲区。

2.其他 

  • 「yw」:将光标所在之处到字尾的字符复制到缓冲区中。

  • 「#yw」:复制#个字到缓冲区

  • 「#yy」:例如,「6yy」表示拷贝从光标所在的该⾏“往下数”6行⽂字。

  • 「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。

4.替换

1.按「r」

替换光标所在处的字符。

2.按「R」

替换光标所到之处的字符,直到按下「ESC」键为⽌

3「shift + ~ 」

大小写切换

5. 撤销上⼀次操作

一旦退出wq文件编辑,就无法再进行文件撤销了。但只是保存w,没有进行退出q,可以撤销。 

1.「u」

如果您误执行⼀个命令可以马上按下「u」,回到上⼀个操作。按多次“u”可以执行多次复。

2.「ctrl + r」

撤销的恢复

6.更改

1.「cw」

更改光标所在处的字到字尾处

2.「c#w」

例如,「c3w」表示更改3个字

7.跳至指定的行

1.「ctrl」+「g」

列出光标所在行的行号。

2.「# + shift + g」

「15 + shift + g」,表示移动光标至文章的第15行行⾸。

四).vim--底行模式--命令集

在使用末行模式之前,请记住先按「ESC」键确定您已经处于正常模式,再按「:」冒号即可进⼊末行模式。

1.列出行号

「set nu」: 输⼊「set nu」后,会在文件中的每⼀行前面列出行号。

2.跳到文件中的某⼀行

「#」:「#」号表示⼀个数字,在冒号后输入⼀个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行。

3.查找字符

  • 「/关键字」: 先按「/」键,再输入您想寻找的字符,如果第⼀次找的关键字不是您想要的,可以⼀直按「n」会往后寻找到您要的关键字为⽌。
  • 「?关键字」:先按「?」键,再输入您想寻找的字符,如果第⼀次找的关键字不是您想要的,可以⼀直按「n」会往前寻找到您要的关键字为⽌。

4.补充 

1).「: ! + 命令

直接在vim中执行命令

2).:%s+ / 当前文本内容 / 新内容 /」

批量化替换

3).: vs+ 文件名

分屏操作 (切换文件:Ctrl + w + w)

 五).简单vim的配置

1.配置文件的位置

  • 在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。

  • 而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc”。例如,/root目录下,通常已经存在⼀个.vimrc文件,如果不存在,则创建之。

  • 切换用户成为自己执行 su ,进入自己的主工作目录,执行 cd ~

  • 打开自己命令下的.vimrc文件,执行 vim .vimrc

2.常用配置选项 

" 开启语法高亮
syntax on" 显示行号
set number" 高亮当前行
set cursorline" 自动缩进
set autoindent" 设置 Tab 为 4 个空格
set tabstop=4
set shiftwidth=4
set expandtab" 搜索时忽略大小写
set ignorecase" 智能大小写(如果搜索内容有大写则区分大小写)
set smartcase" 启用鼠标支持
set mouse=a

3.插件配置

可以看下面这位大佬的连接,非常详细

https://gitee.com/mirrorvim/vim-fast

三.编译器gcc/g++


一).背景知识

  • 预处理(进行宏替换/去注释/条件编译/头文件展开等)
  • 编译(生成汇编)
  • 汇编(生成机器可识别代码)
  • 连接(生成可执行文件或库文件)

二).gcc编译选项

1.预处理(进行初步操作)

  • 预处理功能主要包括宏定义,文件包含,条件编译,去注释等
  • 预处理指令是以#号开头的代码行。

实例: gcc –E hello.c –o hello.i

选项“-E”,该选项的作⽤是让 gcc 在预处理结束后停止编译过程。

选项“-o”是指目标⽂件,“.i”⽂件为已经过预处理的C原始程序。

2.编译(生成汇编)

  • 在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言。
  • 用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码

实例: gcc –S hello.i –o hello.s

3.汇编(生成机器可识别代码) 

  • 汇编阶段是把编译阶段⽣成的“.s”文件转成目标文件
  • 读者在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了

实例: gcc –c hello.s –o hello.o

4.连接(生成可执行文件或库文件)

  • 在成功编译之后,就进入了链接阶段。

实例: gcc hello.o –o hello

5.补充 

- E -S -c   形成 .i .s .o文件

我们一般先将源文件编译成 .o文件,再将所有的.o文件连接成可执行程序

三).动态链接和静态链接

1.动态链接 

动态链接的基本思想是把程序按照模块拆分成各个相对独立部分,在程序运⾏时才将它们链接在⼀起形成⼀个完整的程序,而不是像静态链接⼀样把所有程序模块都链接成⼀个单独的可执行文件

举个简单的例子吧 

2.静态链接 

在我们的实际开发中,不可能将所有代码放在⼀个源文件中,所以会出现多个源文件,而且多个源文件之间不是独立的,而会存在多种依赖关系,如⼀个源文件可能要调用另⼀个源文件中定义的函数,但是每个源⽂件都是独立编译的,即每个*.c文件会形成⼀个*.o文件,为了满足前面说的依赖关系,则需要将这些源文件产生的目标文件进行链接,从而形成⼀个可以执行的程序。这个链接的过程就是静态链接 

 

四).静态库和动态库

  • 静态库(只在链接时有用)是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名⼀般为“.a”
  • 动态库与之相反,在编译链接时并没有把库文件的代码加⼊到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库⼀般后缀名为“.so”,如前面所述的libc.so.6 就是动态库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件,如下所示。 gcc hello.o –o hello
  • gcc默认生成的二进制程序,是动态链接的,这点可以通过 file 命令验证

强制使用静态库生成:

Linux下,动态库XXX.so, 静态库XXX.a

Windows下,动态库XXX.dll, 静态库XXX.lib

库的名称:

1.动静态库对比:

  • 动态库形成的可执行程序体积一定很小
  • 可执行程序对静态库的依赖度小,动态库不能缺失
  • 程序运行,需要加载到内存,静态链接的,会在内存中出现大量的重复代码,
  • 动态链接,比较节省内存和磁盘资源

2.补充:

使用C++ 

 初步认识库

 四.自动化构建-make/Makefile


一).背景

  • 会不会写makefile,从⼀个侧面说明了⼀个人是否具备完成大型工程的能力。
  • ⼀个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了⼀系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作
  •  makefile带来的好处就是⸺“自动化编译”,⼀旦写好,只需要⼀个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
  • make是⼀个命令工具,是⼀个解释makefile中指令的命令工具,⼀般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了⼀种在工程方面的编译方法。
  • make是⼀条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建

二).理解

makefile的基本概念---------依赖关系,依赖方法 

依赖关系

上面的文件code,它依赖code.c

依赖方法

gcc -o code code.c ,就是与之对应的依赖关系

1.默认老代码不做重新编译

2.那么make怎么知道可执行程序和源文件的新旧问题?

操作:stat - 文件名

Modify:内容变更,时间更新

Chang:属性变更,时间更新

Access:常指的是文件

最近⼀次被访问的时间。在Linux的早期版本中,每当文件被访问时,其atime都会更新。但这种机制会导致大量的IO操作(多次查看才会改变)

通过对比源文件和可执行文件的Modify时间

 项目清理

  • 工程是需要被清理的
  • 像clean这种,没有被第⼀个目标文件直接或间接关联,那么它后⾯所定义的命令将不会被自动执行,不过,我们可以显示要make执行。即命令⸺“make clean”,以此来清除所有的目标文件,以便重编译
  • 但是⼀般我们这种clean的目标文件,我们将它设置为伪目标,⽤ .PHONY 修饰,伪⽬标的特性是,总是被执行的

PHONY:让make忽略源文件和可执行目标文件的M时间对比

三).推导过程

code:code.ogcc code.o -o code
code.o:code.sgcc -c code.s -o code.o
code.s:code.igcc -S code.i -o code.s
code.i:code.cgcc -E code.c -o code.i
.PHONY:clean
clean:rm -f *.i *.s *.o code

当然一般没有人会像上面这么写 

make是如何工作的,在默认的方式下,也就是我们只输入make命令。

1. make会在当前目录下找名字叫“Makefile”或“makefile”的文件。


2. 如果找到,它会找文件中的第⼀个目标文件(target),在上面的例子中,他会找到 code这个文件,并把这个文件作为最终的目标文件。


3. 如果 code文件不存在,或是 myproc 所依赖的后面的 myproc.o 文件的文件修改时间要比code这个文件新(可以用 touch 测试),那么,他就会执行后面所定义的命令来生成code这个文件。


4. 如果 code所依赖的 code.o 文件不存在,那么 make 会在当前文件中找目标为code.o 文件的依赖性,如果找到则再根据那⼀个规则生成 code.o 文件。(这有点像⼀个堆栈的过程)


5.当然,你的C文件和H文件是存在的啦,于是 make 会生成 code.o ⽂件,然后再用 code.o文件声明 make 的终极任务,也就是执行文件 hello 了。


6. 这就是整个make的依赖性,make会⼀层⼜⼀层地去找文件的依赖关系,直到最终编译出第⼀个⽬标⽂件。


7. 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make根本不理


 8. make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起,我就不工作啦。


 面对多个文件,我们习惯把源文件先编译.o文件,再进行链接

BIN=proc.exe         #定义变量
CC=gcc
#SRC=$(shell ls *.c) #采用shell命令⾏方式,获取当前所有.c⽂件名
SRC=$(wildcard *.c)  #或者使⽤ wildcard 函数,获取当前所有.c⽂件名
OBJ=$(SRC:.c=.o)     #将SRC的所有同名.c 替换 成为.o 形成⽬标⽂件列表
LFLAGS=-o            #链接选项
FLAGS=-c             #编译选项
RM=rm -f             #引⼊命令$(BIN):$(OBJ)@$(CC) $(LFLAGS) $@ $^            #$@:代表⽬标⽂件名。 $^: 代表依赖⽂件列表@echo "linking ... $^ to $@"
%.o:%.c                               #%.c 展开当前⽬录下所有的.c。 %.o: 同时展开同名.o@$(CC) $(FLAGS) $<                #%<: 对展开的依赖.c⽂件,⼀个⼀个的交给gcc。@echo "compling ... $< to $@"     #@:不回显命令.PHONY:clean
clean:$(RM) $(OBJ) $(BIN) # $(RM).PHONY:test
test:@echo $(SRC)@echo $(OBJ)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/900151.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在CPU服务器上部署Ollama和Dify的过程记录

在本指南中&#xff0c;我将详细介绍如何在CPU服务器上安装和配置Ollama模型服务和Dify平台&#xff0c;以及如何利用Docker实现这些服务的高效部署和迁移。本文分为三大部分&#xff1a;Ollama部署、Dify环境配置和Docker环境管理&#xff0c;适合需要在本地或私有环境中运行A…

请求被中止: 未能创建 SSL/TLS 安全通道。

需要安装vs2019社区办&#xff0c;下载VisualStudioSetup.exe后&#xff0c;报无法从"https://aka,ms/vs/16/release/channel"下载通道清单错误&#xff0c;接着打开%temp%目录下的最新日志&#xff0c;发现日志里报&#xff1a; [27d4:000f][2025-04-04T21:15:43] …

第六课:AI绘画进阶模型

文章目录 Part.01 文本嵌入(Embeddings)Part.02 低秩模型(LoRa)Part.03 超网络(Hypernetwork)Part.01 文本嵌入(Embeddings) Embeddings(Textual Inversion)Checkpoint如果是字典,Embeddings就是书签,让检索更加高效深度学习中Embeddings叫做嵌入式向量使用方法:下载Embeddi…

阅读分析Linux0.11 /boot/setup.s

目录 第一部分第二部分第三部分 该源文件功能分为三部分&#xff1a; &#xff08;1&#xff09;源文件开始部分是通过各种中断指令&#xff0c; 初始化计算机的组成硬件&#xff0c;获得硬件的参数&#xff0c;然后保存到段空间0X9000。该空间原来是保存加载到内存的引导扇区内…

TSMaster在新能源汽车研发测试中的硬核应用指南

——从仿真到标定&#xff0c;全面赋能智能汽车开发 引言&#xff1a;新能源汽车测试的挑战与TSMaster的破局之道 新能源汽车的快速发展对研发测试提出了更高要求&#xff1a;复杂的电控系统、高实时性通信需求、多域融合的验证场景&#xff0c;以及快速迭代的开发周期。传统测…

web漏洞靶场学习分享

靶场&#xff1a;pikachu靶场 pikachu漏洞靶场漏洞类型: Burt Force(暴力破解漏洞)XSS(跨站脚本漏洞)CSRF(跨站请求伪造)SQL-Inject(SQL注入漏洞)RCE(远程命令/代码执行)Files Inclusion(文件包含漏洞)Unsafe file downloads(不安全的文件下载)Unsafe file uploads(不安全的文…

《Linux内存管理:实验驱动的深度探索》【附录】【实验环境搭建 4】【Qemu 如何模拟numa架构】

我们在学习 linux 内核时&#xff0c;会涉及到很多 numa 的知识&#xff0c;那我们该如何在 qemu 中模拟这种情况&#xff0c;来配合我们的学习呢&#xff1f; 我们该如何模拟 如下的 numa 架构 Qemu 模拟 NUMA 架构 -M virt,gic-version3,virtualizationon,typevirt \ -cp…

YOLOv12 从预训练迈向自主训练,第一步数据准备

视频讲解&#xff1a; YOLOv12 从预训练迈向自主训练&#xff0c;第一步数据准备 前面复现过yolov12&#xff0c;使用pre-trained的模型进行过测试&#xff0c;今天来讲下如何训练自己的模型&#xff0c;第一步先准备数据和训练格式 https://gitcode.com/open-source-toolkit/…

Keil 5 找不到编译器 Missing:Compiler Version 5 的解决方法

用到自记&#xff1a; 下载地址&#xff1a; Keil5 MDK541.zip ​编辑https://pan.baidu.com/s/1bOPsuVZhD_Wj4RJS90Mbtg?pwdMDK5 问题描述 没有找到 compiler version5 &#xff1a; 1. 下载 Arm Compiler 5 也可以直接点击下载文章开头的文件。 2. 安装 直接安装在KEI…

结肠镜3D视频数据集-C3VD论文中文版

文章目录 标题作者摘要一、介绍1.1. 相关工作1.1.1. 内镜重建数据集1.1.2. 注册真实和虚拟内窥镜图像1.1.3. 2D-3D注册1.2. 贡献 二、方法2.1. 幻影模型生产2.2. 数据采集2.3. 注册流程概述2.3.1. 数据预处理2.3.2. 目标深度估计2.3.3. 渲染深度帧2.3.4. 边缘损失和优化 2.4. 模…

hadoop 集群的常用命令

# 查看HDFS目录内容 hadoop fs -ls /path # 创建目录 hadoop fs -mkdir /path/to/dir # 上传本地文件到HDFS hadoop fs -put localfile /hdfs/path # 下载HDFS文件到本地 hadoop fs -get /hdfs/path localfile # 查看文件内容 hadoop fs -cat /hdfs/path/file # 删除文件/…

MaxEnt物种分布建模全流程;R+ArcGIS+MaxEnt模型物种分布模拟、参数优化方法、结果分析制图与论文写作

融合R语言的MaxEnt模型具有以下具体优势&#xff1a; 数据处理高效便捷 &#x1f4ca;强大的数据预处理功能&#xff1a;R语言提供了丰富的数据处理工具&#xff0c;能够轻松完成数据清洗、筛选、转换等操作&#xff0c;为MaxEnt模型提供高质量的输入数据。 &#x1f310;自动…

Java基础 4.4

1.方法快速入门 public class Method01 {//编写一个main方法public static void main(String[] args) {//方法使用//1.方法写好后&#xff0c;如果不去调用(使用)&#xff0c;不会输出Person p1 new Person();p1.speak();//调用方法 p1.cal01();//调用计算方法1p1.cal02(10);…

Tiktok矩阵运营中使用云手机的好处

Tiktok矩阵运营中使用云手机的好处 云手机在TikTok矩阵运营中能够大幅提高管理效率、降低封号风险&#xff0c;并节省成本&#xff0c;是非常实用的运营工具。TikTok矩阵运营使用云手机有很多优势&#xff0c;特别是对于需要批量管理账号、提高运营效率的团队来说。以下是几个…

指针函数、函数指针和指针函数指针的全面总结

C中指针函数、函数指针和指针函数指针的全面总结 一、核心概念区别 概念本质声明示例核心特征指针函数返回指针的函数int* func(int);函数定义&#xff0c;返回值是指针类型函数指针指向函数的指针int (*ptr)(int);变量&#xff0c;存储函数地址指针函数指针指向指针函数的指…

CherryStudio MCP实战(一)filesystem篇

随着DeepSeek的爆火&#xff0c;各行各业都在围绕着大模型寻找新质量生产力。简单来说&#xff0c;DeepSeek像是人的大脑&#xff0c;他可以推理&#xff0c;帮你思考一些问题&#xff0c;但是具体要做一些事情的时候&#xff0c;他还需要“手脚”来协同。MCP&#xff08;Model…

TCP基础篇(一)

文章目录 1.TCP 是如何保证可靠性的?2. 滑动窗口机制3 超时重传4.TCP 报文格式5. 什么是 TCP 协议5.1 如何唯一确定一个 TCP 连接 6.TCP 三次握手过程6.1 可以两次握手吗? 7.TCP 的四次挥手7.1 为什么客户端要等待2MSL&#xff1f; 8.linux 中查看 TCP 的连接9.TCP 为什么要有…

【Axure元件分享】时间范围选择器

时间范围选择器下拉选择开始时间和结束时间&#xff0c;实现效果如下。 源文件截图&#xff1a; 元件获取方式&#xff1a;

大模型学习一:deepseek api 调用实战以及参数介绍

一、说明 DeepSeek&#xff08;杭州深度求索人工智能基础技术研究有限公司&#xff09;是一家专注于大语言模型&#xff08;LLM&#xff09;研发的中国创新型科技公司&#xff0c;成立于2023年7月17日&#xff0c;由幻方量化孵化。其核心产品包括开源推理模型DeepSeek-R1、多模…

【Linux网络与网络编程】03.UDP Socket编程

一、UDP Socket编程接口 // 创建套接字 int socket(int domain, int type, int protocol); // 参数&#xff1a; // domain&#xff1a;域&#xff08;协议家族&#xff09;&#xff0c;这里使用 AF_INET 表示进行网络编程 // type&#xff1a;网络通信传输的类型&#xff0…