自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

赵凯月的博客

技术爱好者一枚

  • 博客(378)
  • 收藏
  • 关注

原创 关于出书这件事

推荐

2022-12-05 10:06:41 68

转载 linux-c使用inotify监控文件

监控

2022-12-06 23:00:09 15

转载 c语言进程间通信

进程间通信

2022-12-04 23:32:30 16

转载 vim quickfix 插件定位出错

quickfix

2022-11-28 20:14:37 9

原创 c语言malloc不初始化,为什么没有占用系统空闲内存

c语言malloc

2022-11-24 22:12:36 186

转载 cppcheck的安装与使用

c语言检查

2022-11-22 00:13:04 110

原创 vimrc的配置(插件从gitee上进行下载)

vim的配置管理文件

2022-11-06 11:19:31 118

原创 安装vim插件慢怎么办?

vim插件管理

2022-11-04 00:40:23 217

原创 安装vim9、vim8.2方法

vim

2022-11-01 01:33:10 138

原创 linux系统下离线安装docker

docker使用

2022-10-29 23:01:47 900

原创 vim安装配置coc.vim实现语言的自动补全

vim的c语言自动补全

2022-10-26 23:33:05 321

转载 linux间多进程通信(共享内存)

进程间通信

2022-09-13 12:16:53 194

原创 Linux下搜索神器fzf的配置和使用

fzf安装和使用

2022-09-12 18:57:22 458

转载 vim中的高亮所有相同单词的方法

vim高亮关键字

2022-09-11 11:33:46 423

转载 Vim中无法用Alt键来映射

vim的快捷键alt映射设置

2022-09-11 11:28:22 146

原创 vim的列模式进行替换、删除、插入

vim的使用和配置

2022-09-11 11:23:31 992

原创 char str[] 和char *str 的区别

c语言基础知识点

2022-06-09 23:38:54 147

转载 VScode 中 Clangd 使用

1、VScode 中 Clangd 使用VScode 中 Clangd 优缺点优点占用系统资源确实比 C/C++ 少了很多,无论是 CPU 还是 内存的使用。(最重要)缺点操作相较于 C/C++ 确实也繁琐一点。总结一下,就是对于大型项目来说,使用 clangd 能够明显降低系统资源的占用,能够减少出现系统卡顿的情况,不过使用门槛较高。C/C++ 更适合小项目的开发,使用起来更加便利,能够更好的进行调试。2、VScode 中 Clangd 使用Linux 下 clangd 安装操

2022-04-30 20:34:08 1888

转载 链接、装载和库看完这个系列就够了(七)(静态库封装)

开发中,我们有时候需要把相关的功能模块做成库的时候提供给其他人使用,我们谈一下静态库的方式。方式一//lib_a1.c #include <stdio.h>int a1_fun(){ printf("a1_fun\n"); return 0;}//lib_a2.c int a1_fun();int a2_fun(){ a1_fun(); return 0;}//main.c #include <s

2022-04-14 23:51:49 82

转载 链接、装载和库看完这个系列就够了(六)(-Wl,-export-dynamic参数)

首先我们来看一个简单的程序://lib_so1.c int fun();int fun_so(){ fun(); return 0;}//main.c #include <stdio.h>int fun_so();int fun(){ printf("in main\n"); return 0;}int main(){ fun_so(); return 0;}#M

2022-04-14 23:48:36 175

转载 链接、装载和库看完这个系列就够了(五)(符号同名问题续)

之前讲过了静态库和动态库同名的问题,现在来更加深入的了解一下。两个动态库调用含同名符号的静态库先说一下为什么会出现这种情况?比如有两个不同的开源的动态库,但是这两个动态库都同时调用了一个静态库,比如openssl,但是这两个动态库调用的openssl的版本是不同的,可能存在一定的兼容性问题,这样,当一个工程中同时调用这两个开源库的时候可能会出现问题。我们来测试一下,首先是两个不同的静态库://lib_fun1.c #include <stdio.h>#include "lib_fun1

2022-04-14 23:45:52 61

转载 链接、装载和库看完这个系列就够了(四)(符号同名问题)

示例代码首先贴出代码://lib_fun1.c #include <stdio.h>#include "lib_fun1.h"int fun(){ printf("in lib_fun1\n"); return 0;}int fun1(){ fun(); return 0;}//lib_fun2.c #include <stdio.h>#include "lib_fun2.h"int fun

2022-04-14 23:42:42 67

转载 链接、装载和库看完这个系列就够了(三)(动态库链接问题)

前面谈到了静态库的链接顺序问题,我们看一下动态库是否也有链接问题。动态库链接顺序问题直接上代码://lib_so1.c #include "lib_so1.h"int so1_fun(){ return 0;}//lib_so2.c #include "lib_so2.h"#include "lib_so1.h"int so2_fun(){ so1_fun(); return 0;}//main.c #include "lib

2022-04-14 23:39:11 155

转载 链接、装载和库看完这个系列就够了(二)(静态库链接顺序问题续)

单个.o链接生成静态库让我们来继续深入的了解一下静态库的链接问题,我们把函数在每个静态库中再添加一个函数,同时修改一下Makefile://lib_a1.c #include "lib_a1.h"int a1_fun(){ return 0;}int a1_fun2(){ return 0;}//lib_a2.c #include "lib_a2.h"#include "lib_a1.h"int a2_fun(){ a1_fun

2022-04-14 23:25:16 69

转载 链接、装载和库看完这个系列就够了(一)(静态库链接顺序问题)

初衷工作中经常会碰到不同平台之间移植代码,项目中引入各种开源库,经常会碰到很多奇怪的编译、链接问题,这里做一下整理,尽量包含常见的大部分问题。首先我们来关注一下链接顺序引发的问题。静态库链接顺序问题最常见的问题正常情况下(每个静态库之间没有相互依赖关系),静态库之间链接顺序是不需要关注的,但是如果两个库之间存在相互的调用,就会出现链接问题,看一个例子(头文件只声明函数,不再贴出)://lib_a1.c#include "lib_a1.h"int a1_fun(){ retur

2022-04-14 22:52:39 577

原创 C语言extern和static

一、extern与函数先来理解2个概念:外部函数:如果在当前文件中定义的函数允许其他文件访问、调用,就称为外部函数。C语言规定,不允许有同名的外部函数。内部函数:如果在当前文件中定义的函数不允许其他文件访问、调用,只能在内部使用,就称为内部函数。C语言规定不同的源文件可以有同名的内部函数,并且互不干扰。二、static、extern与函数的总结1.static在定义函数时,在函数的最左边加上static可以把该函数声明为内部函数(又叫静态函数),这样该函数就只能在其定义所在的文件中使用。

2022-04-14 00:19:56 740

转载 C语言中extern的用法

在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。extern修饰变量的声明。举例来说,如果文件a.c需要引用b.c中变量int v,就可以在a.c中声明extern int v,然后就可以引用变量v。能够被其他模块以extern修饰符引用到的变量通常是全局变量。还有很重要的一点是,extern int v可以放在a.c中的任何地方,比如你可以在a.c中的函数fun定义的开头处声明extern int v,然后就可以引用到变量v了,只不过这

2022-04-12 19:46:33 478

原创 c语言中不定参数的使用

1、使用以下三个函数可实现不定参数#include<stdarg.h>void va_start(va_list ap, last);type va_arg(va_list, type);void va_end(va_list ap);《1》、va_start该函数用来初始化指针变量ap(va_list实际是void类型),之后处理参数就默认从ap开始处理。last一般为传过来的参数列表的第一个参数。《2》、va_arg该函数就是将ap指针按照type类型向后移动,然后返回a

2022-04-09 18:20:46 188

转载 网络学习 IP路由器寻址过程

TCP/IP协议簇是目前互联网应用最广的协议栈,谈到TCP/IP协议栈就不能不讲一讲IP路由的问题,因为在我们使用的网络通信中几乎每时每刻都在发生着IP路由的事件……。当你在网络世界中还是一位新手的时候,你也许认为设备之间实现IP路由所需的仅仅是一台设备的IP地址而已,如果你真的这样认为那就错了。每台设备在进行IP路由的时候除了必需的IP地址外还需要很多其他信息来完成数据的封装!我将通过以下网络场景提供的案例一步一步地来分析设备在进行IP路由时将会发生哪些通信事件。这个场景中有两个网络,这两个网络通过一

2022-04-04 14:50:23 2241

转载 ftok()函数深度解析-以及msgsnd、msgrcv、msgget等函数

一、ftok函数关于ftok函数,先不去了解它的作用来先说说为什么要用它,共享内存,消息队列,信号量它们三个都是找一个中间介质,来进行通信的,这种介质多的是。就是怎么区分出来,就像唯一一个身份证来区分人一样。你随便来一个就行,就是因为这。只要唯一就行,就想起来了文件的设备编号和节点,它是唯一的,但是直接用它来作识别好像不太好,不过可以用它来产生一个号。ftok()就出场了。ftok函数具体形式如下:key_t ftok(const char *pathname, int proj_id);其中参数f

2022-03-30 21:12:37 263

转载 vscode函数跳转环境搭建

之前读书学习时,代码量比较小,装个C/C++插件就可搞定,但面对比较大的工程,只安装这个插件就不起作用了,就需要建立符号链接。1 基础环境C/C++”插件“C/C++”插件是来自微软官方的 C/C++ 插件,必备的插件,是代码跳转、自动补全、代码大纲显示等功能的基础。2 GNU Global工具global管理工具分为两部分:vscode的gun global插件本地的global工具1、GNU Global插件工具GNU Global是实现函数跳转的基础工具,VSCode中提供了“C

2022-03-28 23:05:38 2540 2

原创 什么是SSH 以及常见的ssh 功能

一、SSHSSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的实现是OpenSSH,它是自由软件,应用非常广泛。这里只讨论SSH在Linux Shell中的用法。如果要在Windows系统中使用SSH,会用到另一种软件PuTTY,这需要另文介绍。SSH之所以能够保证安全,原因在于它采用了公钥加密整个过程是这样的:(1)远程主机收到用户的登录请求,把自己的公钥发给用户。(2)用户使用这个公钥,将登录密码加密后,发送回来。(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就

2022-03-24 22:48:31 5728

转载 Golang交叉编译中的那些坑

一、Golang交叉编译查看Golang支持的平台和版本go tool dist list这种方式可以查看支持的平台,但是不能看出是否支持cgo,因此此时需要使用json的方式对是否支持cgo的方式进行查看是否支持cgo。使用命令:"go tool dist list -json" 以json格式列出其实go的交叉编译非常简单,只需要在编译前指定系统和CPU架构,基本不会有任何问题,编译出来讲文件拷贝到对应平台就能跑:GOOS=linux GOARCH=arm64 go build xxx.

2022-03-22 22:56:22 598

转载 指针数组和二级指针

一、二级指针和指针数组的关系1、二级指针:存放一级指针变量的地址;2、指针数组:是一个数组,数组成员为一种类型的指针变量。实例:#include <stdio.h>#include <stdlib.h>int main(void){ char *array[4] = {"caa", "dvc", "e3c", "mcn"}; char **p = array; printf("%s\n", p[0]); printf("

2022-03-15 23:24:17 300

原创 C语言中的结构体指针赋值问题

在对数组或者接收到的数据进行赋值时,往往因为结构体中含有指针而无法获取接收到的数据,那么如何才能获取结构体中的指针指向的内容呢?这就涉及到两个部分的内容。1、通过memcpy()赋值或者对数据进行结构体的强制类型转换,其中的指针如何指向?以下通过一个实际的例子进行解析typedef struct { /* data */ int a; int b; void* c;}test;int main(int argc, char const *argv[]){

2022-03-10 22:03:39 3371

原创 C语言中指针数组做函数形参,数组指针做形参

一、C语言中的数组指针与指针数组首先我们需要了解什么是数组指针以及什么是指针数组,如下图:int *p[5]; //指针数组int (*p)[5]; //数组指针那么两个之间有什么区别呢:数组指针的意思即为通过指针引用数组,p先和*结合,说明了p是一个指针变量,指向一个大小为5的数组。所以,int (*p)[5]即为一个数组指针。int *p[5]则是一个大小为5且存放整型指针的数组。那么也可以理解为数组指针是指向数组的指针,其中数组中存放的还是指针

2022-03-09 20:43:06 3515

转载 C语言二级指针和二维数组

一、原理看一下这个C代码输出什么?#include <stdio.h>int main(){ int array[5][4] ={{1,2,3,4},{11,12,13,14},{21,22,23,24},{31,32,33,34},{41,42,43,44}}; int** p = array; printf("%d\n",*p); printf("%d\n",array[0][0]); return 0;}array 是一个二级数组p

2022-03-08 23:40:07 405 2

原创 C语言中如何将二维数组作为函数的参数传递

今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不至于再在这上面浪费时间。正文:首先,我引用了谭浩强先生编著的《C程序设计》上面的一节原文,它简要介绍了如何将二维数组作为参数传递,原文如下(略有改变,请原谅):[原文开始]可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,如: voi

2022-03-08 20:24:04 2045

转载 c语言指针强制类型转换

概要:C语言中,任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的值。不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个地址就是硬件访问的依据,而名字只是提供给程序员的一种记住这个地址的方便一点的方法。但是,不同的变量在机器中都是0-1代码,所以,我们不能简单的通过检查一个值的位来判断它的类型。例如,定义如下:int a; float b;double c; long double d;(假设它们所占的字节分别是4、8、8、10,而且连续存储于某个

2022-03-07 23:32:48 1222 1

原创 shell中xargs命令

一、 xargs的功能xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具xargs可以将管道或标准输入数据转换成命令行参数,也能够从文件的输出中读取数据xargs也可以将单行或多行文本输入转换为其他格式(多行变单行,单行变多行)xargs默认的命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过- -xargs的处理,换行和空白将被空格取代二、xargs用法格式:somecommand | xargs -item command参数-

2022-02-24 10:54:01 1677

空空如也

空空如也

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

TA关注的人

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