C
鲸鱼爱泡芙
这个作者很懒,什么都没留下…
展开
-
使用signal()截取信号后无法产生coredump解决办法
如下所示代码,当截取信号时(已设定ulimit -c unlimited), 在signalProcess()中有三种处理办法,导致三种结果1:进程不会结束,会不停地调用 crashHandler,因为信号没有被处理2:进程结束,但是不会产生coredump3: 处理信号后,将信号恢复为内核默认处理,会产生coredump文件,并结束进程void signalProcess(int signalval){ LOG_WARNING("signal:%d\n", signalval原创 2022-04-07 11:59:43 · 2210 阅读 · 0 评论 -
有符号类型强制转换为无符号类型导致的错误、强制类型转换不安全、隐式类型转换注意事项
项目中的错误案例代码中使用int32 类型 将值十进制值2147483648(0x8000 0000)赋值给uint64类型,在int32类型的二进制中,最高位为1,表示为补码。由Int32赋值给uint64类型的过程中,有两个过程:①将int32升级为int64,此时多出来的最高位全部补1,此时变成了0xffffffff80000000;②,将int64转化为uint64,此时十进制值为18446744071562067968。因此该值远大于2147483648(以下转载自liuchengxu_转载 2022-03-01 16:27:47 · 1632 阅读 · 0 评论 -
linux共享内存内加锁导致死锁
背景:使用共享内存共享一段结构体数据,结构体中包含锁变量,对内部数据操作时,需要加锁。通常 操作中没有问题,但在共享内存数据进行高频率加锁时出现死锁。使用共享内存共享如下结构体数据typedef struct{ OSMutex muOnProcess;}MEM_MANAGER_MEM_CTRL;在对数据进行操作时,对共享数据进行锁操作LockMutex(&pCtrl->muOnProcess);UnlockMutex(&pCtrl->muOnProces原创 2022-01-04 16:38:17 · 1289 阅读 · 0 评论 -
字节对齐
/* 字节对齐 */#define ALIGN_DOWN(value, base) ((value) & ~((base)-1)) ///< 向下对齐#define ALIGN_ROUND(value, base) ALIGN_DOWN((value) + ((base)/2), base) ///< 向附近对齐#define ALIGN_UP(value, base) ALIGN_DOWN((value) + ((base)-1原创 2020-12-24 12:02:06 · 384 阅读 · 0 评论 -
fclose后文件被写入数据但掉电后磁盘数据丢失的问题
fclose后文件被写入数据,但掉电后磁盘磁盘中该文件中没有被写入的数据,如下操作即可: /* 强制写入磁盘,通常写入完后会立即断电,容易导致数据丢失 */ fflush(fBackup); fclose(fBackup); sync(); delay();...原创 2020-11-10 16:24:42 · 794 阅读 · 0 评论