自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 docker运行的一些常用命令

docker run -v /home/ghx:/home/ghx -it --cap-add=SYS_PTRACE docker镜像名字 /bin/bash 注意-v必须在 -it前面,-v共享目录(xxx/xxx:xxx/xxx :后面为docker容器里面的目录,docker exec -it dockername /bin/bash 进入docker容器。docker ps 显示运行的docker容器 加-a显示所有的容器。

2025-07-04 18:06:39 269

原创 gcc编译 依赖重编

编译器会ls -l main.o main.c 与ls -l add.o add.c来比较对应.c与.o文件的时间,若.o比.c新则不会重新编译,若.c比.o新则会重新编译。其中ppp与aaaa为新增成员。导致struct aa结构错误。

2025-07-04 17:19:53 945

原创 linux系统下的磁盘扩容

注意:需要关闭linux系统;需要删除之前的快照;

2025-01-23 16:47:35 942

原创 linux内核调试

crash /usr/lib/debug/lib/modules/3.10.0mo-327.el7.x86_64/vmlinux vmcore(为产生的vmcore文件)调试命令为:crash /usr/lib/debug/boot/vmlinux-4.4.0-186-generic VmCore(为产生的vmcore文件)cp /boot/config-4.19.90-23.8.v2101.ky10.x86_64 下载内核源码位置。linux-image-unsigned-x.x.x-xx对应版本号。

2025-01-22 14:12:28 1601

原创 linux内核态线程详解

唯一的参数是延迟的相对时间,单位为jiffies,上列中将相应的任务推入可中断睡眠队列,睡眠s秒。线程创建后,不会马上运行,而是需要将kthread_create() 返回的task_struct指针传给wake_up_process(),然后通过此函数运行线程。线程一旦启动起来后,会一直运行,除非该线程主动调用do_exit函数,或者其他的进程调用kthread_stop函数,结束线程的运行。我们需要在开启的线程中嵌入该函数并检查此函数的返回值,否则kthread_stop是不起作用的。

2025-01-17 15:57:53 786

原创 linux常用快捷键

就是tty1,这个六个窗口分别为 tty1,tty2 …tty6,您可以按下 Ctrl + Alt + F1 ~ F6 来切换它。+ Alt + F7 就回来了。如果您用的 vmware 虚拟机,命令窗口切换的快捷键为 Alt + Space +F1~F6. 如果您在图形界面下请按 Alt + Shift + Ctrl + F1~F6 切换至命令窗口。如果您安装了图形界面,默认情况下是进入图形界面的,此时您就可以按Ctrl + Alt + F1。Linux 默认提供了六个命令窗口终端机让我们来登录。

2025-01-17 15:37:24 282

原创 c语言随机数rand与srand用法详解

1)当用 srand((unsigned int)time(NULL));2)当用 srand((unsigned int)time(NULL));printf("第%d个随机数: %d\n", i + 1, rand());printf("第%d个随机数: %d\n", i + 1, rand());printf("第%d个随机数: %d\n", i + 1, rand());第二次./test: (time 1737027350)第三次./test: (time 1737027350)

2025-01-16 14:55:36 710

原创 ubuntu镜像与源配置

镜像汇总一下:Ubuntu14.04版镜像:Ubuntu16.04版镜像:Ubuntu18.04版镜像:源配置:ubuntu12源配置:

2025-01-15 14:19:05 712

原创 TCP与UDP数据包分析

UDP不保证可靠传输;MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,EthernetII帧的结构DMAC+SMAC+Type+Data+CRC由于以太网传输电气方面的限制,每个以太网帧都有最小的大小64Bytes最大不能超过1518Bytes,对于小于或者大于这个限制的以太网帧我们都可以视之为错误的数据帧,一般的以太网转发设备会丢弃这些数据帧。不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。

2025-01-14 14:57:58 971

原创 linux常用内核锁对比

也因为spin_lock_bh关闭了cpu调度和中断。在使用spin_lock_bh 的时候它所保护的范围里是不能有sechdule 功能存在的。spin_lock / spin_lock_bh /spin_lock_irq /spin_lock_irqsave 区别总结。包括sleep function, 和一些__might_sleep function.比如mutex_lock.这需要关闭cpu调度。中断又分为软中断和硬中断。我们一般比较常用的几个spin_lock function.差别如下表。

2025-01-14 11:34:20 343

原创 进程通信之共享内存

1.查看系统中的共享存储段ipcs -m2.删除系统中的共享存储段1.shmget ( ):创建共享内存[参数key]:由ftok生成的key标识,标识系统的唯一IPC资源。[参数size]:需要申请共享内存的大小。在操作系统中,申请内存的最小单位为页,一页是4k字节,为了避免内存碎片,我们一般申请的内存大小为页的整数倍。[参数shmflg]:如果要创建新的共享内存,需要使用IPC_CREAT|IPC_EXCL,如果是已经存在的,可以使用IPC_CREAT或直接传0。

2024-12-27 17:47:28 519

原创 进程通信之管道

进程A创建管道(mkfifo) -> 进程A写打开管道(open) -> 进程B读打开管道(open) -> 进程A开始往管道里写数据(write) ->进程B从管道中读数据(read) -> 进程A关闭管道(close) -> 进程B关闭管道(close) -> 删除管道(unlink)注意:创建管道之后,读写部分都打开管道之后才能进行进程间通信。

2024-12-27 16:53:34 292

原创 linux系统定位内存泄露方法Valgrind与AddressSanitizer

2. 读/写释放后的内存块;valgrind是用于构建动态分析工具的装备性框架,它包括一个工具集,每个工具执行某种类型的调试,分析或类似的任务,以帮助完善你的程序,valgrind的架构是模块化的,所以可以容易的创新的工具而又不会扰乱现有的结构.最常用的工具,用来检测程序中出现的内存问题,所有对内存的读写都会被检测到,一切对malloc、free、new、delete的调用都会被捕获。--tool=<name> 是最常用的选项,用于选择使用valgrind工具集中的哪一个工具,默认值为memcheck;

2024-12-27 16:31:25 1098

原创 守护进程与如何创建守护进程

有必要先介绍一下Linux中的进程与控制终端,登录会话和进程组之间的关系:进程属于一个进程组,进程组号(GID)就是进程组长的进程号(PID)。这些进程组共享一个控制终端。setsid()调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离。(3)此进程没有控制终端,如果在调用setsid前,该进程有控制终端,那么与该终端的联系被解除。一个守护进程的父进程是init进程,因为它真正的父进程在fork出子进程后就先于子进程exit退出了,所以它是一个由init继承的孤儿进程。

2024-12-21 16:32:18 1216

原创 socket粘包

黏包:多个数据包被连续存储于连续的缓存中,在对数据包进行读取时由于无法确定发生方的发送边界,而采用某一估测值大小来进行数据读出,若双方size不一致时就会使指发送方发送的若干包数据到接收方接收时黏成一包,从接收缓存区看,后一包数据的头紧接着前一包数据的尾.由TCP协议本身造成,TCP为了提高传输效率,发送方往往要收集到足够多的数据后才发送一包数据.若连续几次发送的数据都很少,通常TCP会根据优化算法把这些数据合成一包后一次发送出去,这样接收方收到了黏包数据.(1)当时短连接的情况下,不用考虑粘包的情况。

2024-12-18 09:32:39 881

原创 踩坑函数式宏

主函数在调用宏并将其展开在判断if (100 > 99)之后就会return 100,进而退出main函数。宏会在调用点展开,上面的函数式宏在主函数中展开如下。这样在主函数中就可以取其值了。

2024-12-17 16:25:08 247

原创 解读C的声明、C的数组

可以通过hoge[i][j]的方式去访问,此时,hoge[i]是指“int的数组(元素个数2)的数组(元素个数3)”中的第i个元素,其类型为“int数组(元素个数2)”。注意:指向数组的指针与指向int的指针不一样,因为数组为地址(即指向指针的指针)。“指向 int 的指针”和“指向 int 的数组(元素个数 3)的指针”是完全不同的数据类型。图3-7是“int的数组(元素个数2)的数组(元素个数3)“。解析:int的数组(元素个数2)的数组(元素个数3)。2)、用于表示数组的[ ],用于表示函数的()。

2024-12-16 14:58:54 510

原创 linux内核文件操作

跟踪do_sys_open()函数,就会发现它主要使用了do_filp_open()函数该函数在fs/namei.c中,而在该文件中,filp_open函数也是调用了do_filp_open函数,并且接口和sys_open函数极为相似,调用参数也和sys_open一样,并且使用EXPORT_SYMBOL导出了,所以我们猜想该函数可以打开文件,功能和open一样。在vfs_read和vfs_write函数中,其参数buf指向的用户空间的内存地址,如果我们直接使用内核空间的指针,则会返回-EFALUT。

2024-12-16 13:47:27 892

原创 c语言o0与o2优化等级详解

在 -O2 优化级别下,编译器会进行一些寄存器的重用和优化操作。参数传递时,32 位整型值只会用到寄存器的低 32 位,因此在 -O0 优化级别中,你看到的是 edi 和 esi,而不是 rdi 和 rsi。在 -O0 优化级别下,编译器严格按照变量的位宽来选择寄存器,即使用 32 位的参数就会使用对应的 32 位寄存器(如 edi 和 esi)。可以看到,在 -O0 下生成的代码包含了函数栈框架设置和临时变量存储,而 -O2 优化下直接使用寄存器和高效的指令来完成加法操作,去除了多余的栈操作。

2024-12-14 10:38:47 1051

原创 多人协作中的git裸仓库

如果你想在本地创建一个可以用于 git clone 的 Git 仓库,比如命名为 aa.git,你可以按照以下步骤操作。通过上述步骤,你成功创建了一个裸的 aa.git 仓库,并可以使用 git clone /path/to/aa.git 克隆它。这个命令会在 aa.git 目录中创建一个裸仓库,仓库内的文件结构会和普通的 .git 目录类似,但它是用于共享的,没有实际的工作区。你现在可以在克隆的仓库中添加文件、进行提交和推送更改到 aa.git 仓库中。首先,在本地创建一个空的裸仓库。

2024-12-14 10:16:21 632

原创 makefile编写规则

obje= $(patsubst %.c,%.o,$(notdir $(src))) # patsubst 函数的使用$(patsubst 参数1,参数2,...) notdir函数的使用为$(notdir 参数)1、目标即要生成的文件。notdir函数的作用是去除参数目录,只剩文件,eg:./src里面的文件,把目录去掉剩下src里面的文件。B、$>: 表示依赖文件集合中的第一个文件(如何依赖文件是以模式定义的eg:%,则表示依赖文件集合)%表示通配符,及a.%.c匹配所以以a.开头以.c结束的文件。

2024-12-13 14:26:08 516

原创 pacp项目实践

userarg:pcap_loop() 的最后一个参数,当收到足够数量的包后 pcap_loop 会调用callback 回调函数,同时将pcap_loop()的user参数传递给它。函数 pcap_dispatch() 函数用于捕获数据包,捕获后还可以进行处理,此外 pcap_next() 和 pcap_next_ex() 两个函数也可以用来捕获数据包。这个函数和 pcap_loop() 非常类似,只是在超过 to_ms 毫秒后就会返回( to_ms 是pcap_open_live() 的第4个参数 )

2024-12-13 10:13:41 1459

原创 iptables详解

用来比对封包的来源 IP,可以比对单机或网络,比对网络时请用数字来表示屏蔽,例屏蔽:172.16.0.201 IP访问,所有数据都将丢弃。TCP状态旗号包括:SYN(同步)、ACK(应答)、FIN(结束)、RST(重设)、URG(紧急)、PSH(强迫推送)Linux 内核中很早就实现了网络防火墙功能,在不同的Linux内核版本中,使用了不同的软件实现防火墙功能。-j ACCEPT(接受),DROP(丢弃),REJECT(拒绝) list(表)跳转到其他表。案例ICMP类型是:8。

2024-12-12 18:22:26 313

原创 c中的#,##与__VAR_ARGS__技巧

比如你要做一个菜单项命令名和函数指针组成的结构体的数组,并且希望在函数名和菜单项命令名之间有直观的、名字上的关系。COMMAND宏在这里充当一个代码生成器的作用,这样可以在一定程度上减少代码密度,间接地也可以减少不留心所造成的错误。1,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量 通过替换后在其左右各加上一个双引号。这时,##这个连接符号充当的作用就是当__VAR_ARGS__为空的时候,消除前面的那个逗号。

2024-12-12 16:16:25 337

原创 VM报错 无法连接 MKS: 套接字连接尝试次数太多;正在放弃。

2,将VMware 相关的服务都启动;3,关机重启系统即可。

2024-12-12 14:33:21 430

原创 一篇搞懂c指针

/ 定义一个数组num,它里面有10个元素,元素类型为函数指针,函数的返回值为整型,函数的参数为整型(一个)。//定义一个func_p函数指针类型(函数指针量) 定义一个函数类型的参数 func_p等同于(void*)(int a);//执行失败,因为此时二级指针num_dull指向main函数的num的地址, 所以*num_dull为main函数中num的指向为null,所以赋值失败。typedef int (*Pointer)(int a) //Pointer是int(*)(int a)的同义词。

2024-12-12 13:21:02 498

原创 malloc(0)与malloc理解

而且申请超过24时,内核按照16字节对其申请内存的。首先来解释malloc(0)的问题,这个语法是对的,而且确实也分配了内存,但是内存空间是0,就是说返回给你的指针是不能用的,感觉奇怪吧?小于128k的内存,使用brk分配内存,将_edata往高地址推(只分配虚拟空间,不对应物理内存(因此没有初始化),第一次读/写数据时,引起内核缺页中断,内核才分配对应的物理内存,然后虚拟地址空间建立映射关系)大于128k的内存,使用mmap分配内存,在堆和栈之间找一块空闲内存分配(对应独立内存,而且初始化为0)

2024-12-12 09:55:54 239

原创 c中可变长结构体

在方式二中:结构体成员p的地址紧挨着结构体struct mystruct_dull的地址。在方式一中:结构体成员p的地址是随机分配的。

2024-12-12 09:16:24 240

原创 c与c++获取带空格与不带空格字符串

【代码】c与c++获取带空格与不带空格字符串。

2024-12-11 15:06:43 1009

原创 linux用户态与内核之间通信

1,netlink使用简单,只需要在include/linux/netlink.h中增加一个新类型的 netlink 协议定义即可,(如 #define NETLINK_TEST 20 然后,内核和用户态应用就可以立即通过 socket API 使用该 netlink 协议类型进行数据交换);/* zero */使用netlink 进行应用与内核通信的应用很多;(4)nlmsg_seq:消息序列号,用以将消息排队,有些类似TCP协议中的序号(不完全一样),但是netlink的这个字段是可选的,不强制使用;

2024-12-11 14:06:15 598

原创 Linux内存mem和 swap详解,设置mem不可交换到swap

当Linux的物理内存快要被耗尽时,系统会把一些进程占用的内存转移到 swap 区,当物理内存被释放一部分时,swap 区的一些内存占用又慢慢回到 mem 区,但是 mem 区却不再是之前的满负荷状态,而是有一部分 free 的内存!4)swap 是内存不够时,磁盘虚拟出来的内存,磁盘主要是 I/O 级别的操作,并不是系统内核级别的操作,处理速度跟 mem 区不是一个等级。3)当 Men 区的资源进行释放时,被挪到 swap 的内存并不会全部回来,随着系统或者程序的唤醒才会慢慢回到 mem 区。

2024-12-11 11:40:21 1119

原创 win与linux系统防火墙详解

及优先级关系为firewall-cmd --direct --add-rule > firewall-cmd --add-rich-rule >其他配置(其中firewall-cmd --direct中优先级高的大于低的,同一优先级顺序匹配,firewall-cmd --add-rich-rule中拒绝规则生效)参数priorit为优先级(0最高) 参数args为iptables的语法。--zone= --remove-service=移除指定区域已设置的允许访问的某项服务。

2024-12-11 11:24:16 1604

原创 Redhat系统yum网络源配置

yum makecache 2.更新系统(可选)yum update 3.安装测试yum –y install tree 4. 查看已安装的源yum repolist all。注意:yum-plugin-fastestmirror-1.1.31-53.el7.noarch.rpm与yum-3.4.3-167.el7.centos.noarch.rpm需要一起安装。将文件放在 /etc/yum.repos.d文件夹下,并将原yum文件作备份,将文件下载好以后,更改文件中的变量;一,删除自带的yum包。

2024-12-11 11:16:23 850

原创 linux系统下动态库与静态库的生成与使用

shared 表示生成共享的动态库。gcc -o main main.c -L. -ladd生成可执行文件main。一般配置路径为:/etc/ld.so.conf之后执行ldconfig才生效。编译命令:gcc -rdynamic -o main main.c -ldl。1,这是编译加载动态库,需要将动态库路径加到系统可调用目录下。3,动态库路径写入环境变量:LD_LIBRARY_PATH。2,编译时带-Wl,-rpath=动态库路径。文件main.c,add.c,add.h。一:静态库的生成与使用。

2024-12-11 11:03:18 380

原创 c语言源文件结构体修改重新make执行程序报错

编译器会ls -l main.o main.c 与ls -l add.o add.c来比较对应.c与.o文件的时间,若.o比.c新则不会重新编译,若.c比.o新则会重新编译。导致struct aa结构错误。

2024-12-11 10:47:21 421

makefile编写规则

多文件夹makefile

2024-12-13

用户态链表与队列,内核态链表实现

用户态链表与队列,内核态链表实现

2024-12-13

简单的linux内核模块与开发

利用linux内核中netfilter实现ip,tcp,udp,icmp协议数据的允许与禁止

2024-12-12

空空如也

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

TA关注的人

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