- 博客(22)
- 收藏
- 关注
原创 gdb调试器入门教程
在变量var处设置一个读写观察点(也属于断点,可以用info b查看),当该变量被读取或写入时,由GDB暂停程序。在变量var处设置一个写观察点(也属于断点,可以用info b查看),当该变量被写入时,由GDB暂停程序。在变量var处设置一个读观察点(也属于断点,可以用info b查看),当该变量被读取时,由GDB暂停程序。其实就是在设置断点的基础上加入一个if语句,也可以把gdb的变量加入判断。1, 可用来查看某个地址上的符号,用来查看某个地址对应的函数。用于在循环中使用,继续往下运行,直到跳出循环。
2023-05-20 14:17:51
1007
原创 [Linux C] 多线程使用原子操作API进行线程同步
多线程同步是一个非常常见的问题,本质是多个线程对共享资源的同时访问并不是原子的而导致的逻辑错误,因此需要使用相关的技术来实现多线程之间的协同工作。如果只是对某个全局变量进行操作的多线程简单场景,我们可以使用原子变量来进行线程同步。在C11中,提供了原子操作的接口,使得C语言程序员能够通过调用接口来使用原子操作。要使用原子操作,需要将对应的共享资源用原子类型来定义。原子变量的对程序的影响较小,适合对全局变量等临界区代码较少的简单操作的多线程场景。C11提供了丰富的原子操作API,用于实现原子操作。
2023-05-20 14:00:53
805
原创 gdb设置依赖断点
我们都知道:可以通过使用gdb可以在我们想要停下的地方设置停止点。但是如果我们需要设置某个断点依赖于另一个断点而触发,该怎么实现呢?
2023-05-18 11:27:42
340
原创 Linux时间系统及其API
本文从应用开发的角度介绍了Linux时间系统以及Linux系统下的一些时间API。希望能帮助大家更好的理解Linux系统。
2023-05-10 15:27:17
403
原创 [Linux]通过shell脚本控制鼠标画一个圈圈
xdotool命令可以让你获取鼠标在屏幕上的位置,并且让你能够控制你的鼠标移动!给予脚本可执行权限,直接运行即可!
2023-05-09 16:00:40
681
原创 [Linux C]使用backtrace+addr2line追踪函数调用栈,实现类似内核中dump_stack的功能
在应用层,backtrace系列函数提供了追踪函数调用栈的功能。addr2line命令可以将代码中的地址转换成源码中的函数和行数。我们就用这两个工具,实现追踪函数调用栈并打印出函数名的功能。
2023-04-18 17:06:26
1364
原创 根据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
2705
原创 [Linux C] 一个获取字符串中最后一个分隔符后的字符串首字符指针的小程序
例如:我们如果想要获取上述字符串中的最后一个’-'的指针,可以通过如下小程序中的getpointer_lastok_after函数实现,直接调用即可!!!
2022-12-02 15:18:41
339
原创 编译报错:has incomplete type 不完全的类型
has incomplete type问题及解决has incomplete type问题及解决在编译Linux C应用程序时,gcc如果报这种错误:has incomplete type(不完全的类型),往往是由于出现与系统重复的头文件导致。
2022-11-28 23:32:28
26826
4
原创 pthread_barrier_ 多线程之间的屏障,相约一起走!
barrier单词的意思是障碍物、屏障。就像它的字面意思一样,barrier为多线程提供了一种同步行动的机制,就像是短跑比赛,只有选手到齐了才能开始一样,调用pthread_barrier_wait来进行等待的线程必须达到预先设定的数量之后,所有调用pthread_barrier_wait的线程才能继续往后运行。
2022-11-27 23:20:01
726
原创 Linux C代码中设置网卡ip地址和子网掩码
Linux环境下,C语言代码中可以使用ioctl,使用其中的SIOCSIFADDR和SIOCIFNETMASK命令来设置网卡的ip地址和子网掩码。
2022-11-12 10:48:32
2352
原创 【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
1780
原创 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
3960
3
Linux系统下控制鼠标画圆圈的shell脚本
2023-05-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人