自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 gdb调试器入门教程

在变量var处设置一个读写观察点(也属于断点,可以用info b查看),当该变量被读取或写入时,由GDB暂停程序。在变量var处设置一个写观察点(也属于断点,可以用info b查看),当该变量被写入时,由GDB暂停程序。在变量var处设置一个读观察点(也属于断点,可以用info b查看),当该变量被读取时,由GDB暂停程序。其实就是在设置断点的基础上加入一个if语句,也可以把gdb的变量加入判断。1, 可用来查看某个地址上的符号,用来查看某个地址对应的函数。用于在循环中使用,继续往下运行,直到跳出循环。

2023-05-20 14:17:51 957

原创 [Linux C] 多线程使用原子操作API进行线程同步

多线程同步是一个非常常见的问题,本质是多个线程对共享资源的同时访问并不是原子的而导致的逻辑错误,因此需要使用相关的技术来实现多线程之间的协同工作。如果只是对某个全局变量进行操作的多线程简单场景,我们可以使用原子变量来进行线程同步。在C11中,提供了原子操作的接口,使得C语言程序员能够通过调用接口来使用原子操作。要使用原子操作,需要将对应的共享资源用原子类型来定义。原子变量的对程序的影响较小,适合对全局变量等临界区代码较少的简单操作的多线程场景。C11提供了丰富的原子操作API,用于实现原子操作。

2023-05-20 14:00:53 688

原创 gdb设置依赖断点

我们都知道:可以通过使用gdb可以在我们想要停下的地方设置停止点。但是如果我们需要设置某个断点依赖于另一个断点而触发,该怎么实现呢?

2023-05-18 11:27:42 294

原创 龙芯3A4000 MIPS架构中C语言赋值语句对应的mips汇编解析

环境:龙芯3A4000+Loongnix-1.0

2023-05-12 11:05:58 534

原创 Linux时间系统及其API

本文从应用开发的角度介绍了Linux时间系统以及Linux系统下的一些时间API。希望能帮助大家更好的理解Linux系统。

2023-05-10 15:27:17 342

原创 [Linux]通过shell脚本控制鼠标画一个圈圈

xdotool命令可以让你获取鼠标在屏幕上的位置,并且让你能够控制你的鼠标移动!给予脚本可执行权限,直接运行即可!

2023-05-09 16:00:40 561

原创 [Linux C]使用backtrace+addr2line追踪函数调用栈,实现类似内核中dump_stack的功能

在应用层,backtrace系列函数提供了追踪函数调用栈的功能。addr2line命令可以将代码中的地址转换成源码中的函数和行数。我们就用这两个工具,实现追踪函数调用栈并打印出函数名的功能。

2023-04-18 17:06:26 1103

原创 Linux内核中的init段、initcall

讲述了Linux内核启动时会执行的各种init代码,内核代码中通过宏来声明。

2023-04-18 10:18:37 993

原创 环形缓冲区ring buffer的简单实现

【代码】环形缓冲区ring buffer的简单实现。

2022-12-28 22:07:24 381

原创 根据pthread_t获取pid_t的tid(线程的pid)

Linux下的线程本质是轻量级进程(LWP),因此真正的线程id实际上是该线程的pid(pid_t),而posix库中的pthread_t只是应用层描述线程对象的数据结构的指针(内存地址)而已。为了防止不同的平台,不同的libpthread库的版本不一致导致的pthread_t数据结构对象的定义不同的问题,我们使用gdb的ptype功能来获取用户态线程对象的数据结构定义。使用gdb的p和0指针的巧妙用法获取tid成员的偏移(TID_OFFSET)1,确认pthread_t指向的数据结构的类型(声明)

2022-12-02 15:52:50 2425

原创 实现读写到文件末尾的功能

walkinto_file_end函数实现读写到文件末尾的功能。

2022-12-02 15:20:54 207

原创 [Linux C] 一个获取字符串中最后一个分隔符后的字符串首字符指针的小程序

例如:我们如果想要获取上述字符串中的最后一个’-'的指针,可以通过如下小程序中的getpointer_lastok_after函数实现,直接调用即可!!!

2022-12-02 15:18:41 295

原创 [Linux C] 简易web服务器实现

用C语言编写的简易web server,HTTP/1.1,运行环境:Ubuntu 18.04。

2022-11-30 15:40:10 394

原创 编译报错:has incomplete type 不完全的类型

has incomplete type问题及解决has incomplete type问题及解决在编译Linux C应用程序时,gcc如果报这种错误:has incomplete type(不完全的类型),往往是由于出现与系统重复的头文件导致。

2022-11-28 23:32:28 22746 4

原创 pthread_barrier_ 多线程之间的屏障,相约一起走!

barrier单词的意思是障碍物、屏障。就像它的字面意思一样,barrier为多线程提供了一种同步行动的机制,就像是短跑比赛,只有选手到齐了才能开始一样,调用pthread_barrier_wait来进行等待的线程必须达到预先设定的数量之后,所有调用pthread_barrier_wait的线程才能继续往后运行。

2022-11-27 23:20:01 632

原创 timer_create的简单使用

当时间到达时,发送一个信号。当时间到达时,创建一个线程。

2022-11-26 23:40:37 840

原创 使用LD_PRELOAD替换封装原有的库函数

该方法可以只替换一个库函数,而不用替换一整个.so库文件。

2022-11-26 23:34:07 238

原创 使用dlsym动态加载库函数、封装原有库函数

使用dlsym给库函数"套壳"

2022-11-26 23:30:43 416

原创 基于libpcap库抓取网卡上的网络数据包

基于libpcap库抓取网络数据包。

2022-11-12 13:20:40 601

原创 Linux C代码中设置网卡ip地址和子网掩码

Linux环境下,C语言代码中可以使用ioctl,使用其中的SIOCSIFADDR和SIOCIFNETMASK命令来设置网卡的ip地址和子网掩码。

2022-11-12 10:48:32 2096

原创 【Linux C应用】判断TCP连接是否断开的方法

方法一:struct tcp_info info;int len=sizeof(info);getsockopt(sock, IPPROTO_TCP, TCP_INFO, &info, (socklen_t *)&len); if((info.tcpi_state==TCP_ESTABLISHED)) 则说明未断开 else 断开方法二:通过send函数失败时的errno值判断套接字是否处于连接状态errno==EPIPE

2022-11-10 10:10:02 1642

原创 Linux内核(模块)的编译与安装、修改内核版本号

一、Linux内核的编译与安装1、make编译内核可以使用CROSS_COMPILE指定使用系统中的哪个编译器,默认使用gcc可以使用ARCH指定目标平台的架构,例如:ARCH=ARM示例:make ARCH=mips CROSS_COMPILE=mipsel-linux-gnu-2、make install将编译好的内核安装到/boot目录下make INSTALL_PATH=/tmp install使用INSTALL_PATH指定内核的安装位置,需要注意在INSTALL_PATH里不能有~

2022-11-10 09:57:05 3783 3

Linux系统下控制鼠标画圆圈的shell脚本

利用xdotool命令,通过四象限计算,控制鼠标画圆. xdotool命令安装:sudo apt install xdotool 给予可执行权限后,直接运行即可! 希望大家越来越优秀!!!

2023-05-09

空空如也

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

TA关注的人

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