![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
笔记
Dancer__Sky
Keep Real & Have Fun
展开
-
C语言隐式声明导致的死机问题
概述:在一次开发工作中,同样代码同样的一个配置操作在32位平台正常运行,64位平台上会立马死机。编译也没有报任何错误和警告,查看代码也没有任何可疑之处,实在有些莫名。经过打印定位到死机位置是使用一个指针函数A返回的地址进行memcpy操作会立马死机,打印出指针地址,发现函数A内打印指针地址正常,而外部调用这个函数接收到的返回值指针地址高32位被截断了,所以使用该指针就会立马死机。意外的解决: 在本项目中有一个同样类似的指针函数B,这个操作可以正常使用,对比发现,A函...原创 2022-02-17 14:47:59 · 1167 阅读 · 0 评论 -
__thread关键字获取线程id和线程名-减少资源占用
概述: 当我们使用系统调用函数获取线程名字或者线程id,其实这是非常耗系统资源的,当我们频繁获取会占用很多时间。使用__thread关键字就可以完美解决这个问题,只需第一次获取一次即可,极大的减少资源。同时这个功能在我们一个函数被多个线程调用,调试的时候加上线程id和名字,就可以很清楚打印是谁调用的,而且不耗资源,很便于调试。__thread关键字我就稍微说下吧,这个网上很多,__thread是GCC内置的线程局部存储设施,存取效率可以和全局变量相比。__thread变量每一个线程有一份...原创 2020-10-15 20:07:08 · 1189 阅读 · 0 评论 -
编译阶段检测结构体大小是否正常
概述: 在工作中,设备的配置文件是一个大的结构体保存到flash中,这个结构体各个已用的参数偏移是不能改动的(参数很多很复杂),如果改动就会影响后面的设备,导致一系列问题,故参考了网上的资料,写了一个简单例子,用于学习。保证了我们保存flash的结构体不会被不经意改变,导致出问题。实例demo:#include <stdio.h>#include <stddef.h>/* 编译阶段检测结构体的大小是否等于特定值 */#define SI...原创 2020-08-06 17:08:38 · 1216 阅读 · 1 评论 -
iptables实现IP黑白名单功能
概述: 在我们嵌入式设备,可能有时候为了安全会有黑白名单功能,黑名单模式:在黑名单的IP就不能访问我们的设备,白名单模式:只有白名单的IP可以访问我们的设备,其他IP均不能访问我们设备。这里我们就是用iptables完成想要的功能。一,了解iptables基本操作 已经有很多博客解释了这个iptables怎么使用了,我就不多写了,附上参考链接: ...原创 2020-04-26 19:14:23 · 7190 阅读 · 4 评论 -
Linux的进程线程调度策略
概述: 最近接触到关于linux调度的一些相关内容,这里做个总结笔记。这里主要学习到三种调度策略,SCHED_RR,SCHED_FIFO,SCHED_OTHER这三种。具体详细的内容就不多说,已经有很多详细的介绍了。这里记录下怎么查看某个进程或线程的调度策略和优先级,以及怎么修改别的进程或线程的优先级。快速查看进程优先级和调度策略: 找到某个进程或线程...原创 2020-03-13 10:58:21 · 1644 阅读 · 1 评论 -
解决程序越界或栈溢出导致的死机或不正常问题排查的一个方法
概述: 在程序开发中,我们可能会遇到一些莫名的死机或者程序错误的执行。如果是死机我们可以看coredump,但是有时候coredump可能是死在C库,我们看不出来啥。这时我们可以加打印,打印出相关变量,用于确定问题所在。这里记录自己一个简单的问题解决的方法。解决思路: 1,程序在经过一个操作触发后,程序会出现发送的数据发不出或者有时候还会导致死机,看coredum...原创 2019-12-24 14:22:54 · 1897 阅读 · 0 评论 -
解决结构体不对齐,找到对应字段的一个简单方法
概述: 在工作中,我们可能会遇到对接平台是二进制的一个协议,如果我们换了平台或者换了修改地址,可能就会某些偏移不对,导致协议不对或者保存的数据出问题,这里简单介绍一个C语言函数,打印出每个变量相对于结构体开始的偏移地址。这样可以快速找到定位问题,如果自己去计算,在结构题很复杂的情况下很可能会出问题,也太麻烦。废话不多说,直接上demo:#include <std...原创 2019-12-18 19:36:02 · 849 阅读 · 0 评论 -
linux下C程序控制coredump文件生成开启与关闭Demo
概述: 本文主要是控制coredump文件生成的开关设置,在开发工作中coredump可以很好的帮助我们去发现死机等等程序问题,便于查找问题所在,所以这里如何控制coredump文件生成和简单实用coredump做一个简单的记录。Demo中一些详细的解释可以看后面的参考资料的链接,这里就不赘述了。Demo:#include <stdio.h>#include &l...原创 2019-09-05 14:58:14 · 1351 阅读 · 1 评论 -
两种通用加密算法(MD5,RSA)使用
两种通用加密算法(MD5,RSA)使用概述 md5及RSA加密算法是我们比较常见的两种加密算法,也是经常使用到的。我主要是利用md5的C Lib库实现md5加密功能,使用openssl库API实现RSA加密。这里做个笔记,下次用到就可以直接使用了。MD5 MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16原创 2018-01-19 14:14:26 · 4130 阅读 · 0 评论 -
一个通用简单线程池实现的初步封装(C语言)
概述:之前总是听别人说线程池,一直没接触过,借业余时间学习了一下,现在自己简单的封装了一下,也只是在学习的层面,用到实际操作可能还需很多优化修改。1,先看封装的结构体吧,sky_pool.h文件内容,主要就是定义封装了一下线程池所需用到的参数等。#ifndef _SKY_POOL_H_#define _SKY_POOL_H_#include <stdint.h>#include <pthread原创 2017-11-20 09:56:43 · 644 阅读 · 0 评论 -
UDP协议服务器、客户端使用实例Demo
服务器:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <ctype.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#incl原创 2017-07-29 12:16:54 · 885 阅读 · 0 评论 -
windows下挂载虚拟机下的linux目录实现复制粘贴访问---samba服务器使用
1,系统环境 linux : ubuntu14.042,samba安装sudo apt-get install samba3,samba配置 配置文件在/etc/samba/smb.conf,在修改配置文件时可以备份一份原始文件,防止修改错误导致出现问题,可以回滚。 (1)共享目录配置sudo vim /etc/samba/smb.conf在文件末尾添加[sky_se原创 2017-08-16 13:37:58 · 786 阅读 · 0 评论 -
yuyv图像转rgb后转bmp的一个简单demo
yuyv转rgb的公式: r = 1.164*(y-16) + 1.159*(v-128); g = 1.164*(y-16) - 0.380*(u-128) - 0.813*(v-128); b = 1.164*(y-16) + 2.018*(u-128);#include <fcntl.h>#include <stdlib.h>#include <sys/ioc原创 2017-08-05 16:16:46 · 1924 阅读 · 2 评论 -
一个最小堆简单定时器的实现demo
#include <stdio.h>#include <stdlib.h>#include <sys/time.h>#include <time.h>#include <unistd.h>#define HEAP_SIZE 100typedef struct Heap_t Heap_t;typedef struct Timer_t Timer_t;typedef struct Ti原创 2017-06-09 17:13:32 · 1831 阅读 · 0 评论 -
C语言读取及修改简单配置文件内容
运行环境:ubuntu14.04此方式适合小的配置文件,不适合大型文件。假如有文件内容为: IP=192.168.1.20 MASK=255.255.255.0 DNS=192.168.1.1#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <stdint.h>#def原创 2017-06-06 10:36:56 · 8130 阅读 · 0 评论 -
Linux下pthread_cond_wait()多线程同步实例
使用pthread_cond_wait()函数进行多线程同步。 一般与pthread_mutex_t 互斥锁一起使用。 下面是简单demo,主线程每2秒让子线程运行5次。#include <stdint.h>#include <semaphore.h>#include <stdio.h>#include <stdlib.h>#include <pthread.h>#include <u原创 2017-05-02 20:46:46 · 4455 阅读 · 0 评论 -
Linux信号量sem_t简单实例运用
sem_t sem; 定义一个信号量变量。使用时需首先使用sem_init()函数初始化。 在多线程编程中,想让某个线程阻塞等待,减少cpu占用,在该需要运行时才运行。使用信号量一个A线程sem_wait(),阻塞等待;一个B线程在需要运行A线程时sem_post(),解除A线程阻塞。下面是简单demo:#include <stdint.h>#include <semaphore.h>#in原创 2017-05-02 20:10:52 · 9792 阅读 · 0 评论 -
C语言获取文件字节大小及读取内容到内存简单例子
说明:此方式主要用于读取文件为内容连续无换行符文件(如json数据),若有很多换行符想读取每行数据或挑出哪一行数据读取可用别的方法更易读取。demo:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#include <unistd.h>#include <fcntl.h>#include <原创 2017-04-19 17:49:01 · 11666 阅读 · 0 评论 -
非阻塞socket下客户端connect + select简单demo
一个简单实现非阻塞socket,超时响应并判断是否连接成功demo:#include <stdio.h>#include <string.h>#include <sys/types.h>#include <fcntl.h>#include <unistd.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/ine原创 2017-04-18 09:22:08 · 2798 阅读 · 0 评论