C
n大橘为重n
/* 一个有点小情怀的码农 */
展开
-
C++宏定义中#和##的用法
前段时间很到了宏定义中的新知识:#与##,感觉打开了新天地的大门。首先来介绍一下这两种功能:##的用法是负责将其后面的东西转化为字符串,比如:#define TO_STRING(str) #strint main(){ cout << TO_STRING(this is a string) << endl; return 0;}这段代码中,TO_STRING宏就会将括号中的内容转化为字符串,生成"this is a string",然后由co...原创 2021-03-27 01:09:49 · 5727 阅读 · 1 评论 -
关于typedef void (*sighandler_t)(int)的理解
最近,在学习Linux信号量时,看到signal函数中typedef的一个用法,觉得很有意思。于是就拿出来说道说道。 它定义了一个类型sighandler_t,表示指向返回值为void型(参数为int型)的函数(的)指针。它可以用来声明一个或多个函数指针。 sighandler_t sig1, sig2; 这个声明等价于下面这种晦涩难懂的写法: void (*sig1)(int), (*sig2)(int); 1. 关于typed...转载 2020-10-22 19:45:19 · 1092 阅读 · 1 评论 -
prctl函数的应用
intprctl( intoption,unsigned long arg2,unsigned long arg3,unsigned long arg4,unsigned long arg5 )这个系统调用指令是为进程制定而设计的,明确的选择取决于option:PR_GET_PDEATHSIG :返回处理器信号;PR_SET_PDEATHSIG :arg2作为处理器信号pdeath被输入,正如其名,如果父进程不能再用,进程接受这个信号。PR_GET_DUMPABLE :返回处理器标...转载 2020-10-14 16:58:23 · 632 阅读 · 0 评论 -
C/C++在程序中获取CPUID+网卡Mac的几种方法
直接上代码。命令行获取到结果之后需要将16值字符串转换成整数:int tolower(int c){ if (c >= 'A' && c <= 'Z') { return c + 'a' - 'A'; } else { return c; }}unsigned long htoul(char s[]){ int i; unsigned long n = 0; if (s[0] == '0' && (s[1]=='x' ||原创 2020-07-31 21:02:14 · 1824 阅读 · 1 评论 -
基于ARM架构的芯片获取CPU信息(cpuID)的多种方法
由于工作的原因,要获取到ARM芯片的cpuid。了解下存储cpu信息的寄存器内容:CPUID寄存器内容:字段名:Implementer(venter 销售ID)|Variant(大版本号) | Architecture(架构版本)| Part Num(产品代码)|Revision(小版本号)基址偏移量: [31-24] | [23-20] | [19-16]原创 2020-07-31 20:52:30 · 13562 阅读 · 3 评论 -
再记录一个Linux查找段错误的利器——addr2line命令
通过这个命令,可以将函数地址解析为函数名,并确定地址的行数。Addr2line 工具(它是标准的 GNU Binutils 中的一部分)是一个可以将指令的地址和可执行映像转换成文件名、函数名和源代码行数的工具。这种功能对于将跟踪地址转换成更有意义的内容来说简直是太棒了。所以当有段错误的时候,通过地址偏移量或者地址直接定位错误所在位置。使用-e选项来指定可执行映像是test。通...原创 2020-02-27 15:01:34 · 752 阅读 · 0 评论 -
BF算法(暴力算法)--模式匹配算法
模式匹配算法:是数据结构中字符串的一种基本运算,给定一个子串,要求在某个字符串中找出与该子串相同的所有子串,这就是模式匹配。用途:搜索引擎、拼写检查、语言翻译、数据压缩等。BF算法:BF算法即暴力(Brute Force)算法,是普通的模式匹配算法。BF算法的思想:将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等...转载 2020-02-18 15:42:24 · 6980 阅读 · 0 评论 -
循环队列的操作
不是只有排序,二叉树才叫数据结构,面试栽在基本的数组和队列,链表,栈的有的是!!!本文对循环队列的重要操作作出总结。注:为了避免队列空和满两个状态混淆,采用空闲一个位置的方式,即N个元素空间的循环队列最多只能存放N-1个有效元素。这也是大多数教材的做法。1) 循环队列初始化:front=rear=0;2)入队操作:rear=(rear+1)%size;3)出队操作:front=(fro...转载 2020-02-18 13:43:29 · 680 阅读 · 0 评论 -
Linux进程间通信(IPC)——生成唯一键时IPC_PRIVATE和ftok的比较
在linux中,可以使用IPC对象来进行进程间通信。IPC对象存在于内核中,多进程可以操作同一个IPC对象。每个IPC对象都有一个唯一的编号,该编号是由系统分配的。那么不同的进程如何知道这个编号,进而通过它进行通信呢?下面以共享内存为例,进行分析。方法一:通过ftok函数,产生相同的键值。假设,进程p1创建了共享内存。可以在创建时,调用ftok函数,得到一个key值,调用shmget函...转载 2020-01-11 17:17:31 · 763 阅读 · 0 评论 -
C/C++ 字符串比较——区分大小写和不区分大小写
一、区分大小写一般我们常用的字符串比较函数都是区分大小写的。我们这里只介绍strcmp函数,在windows和linux下函数名和用法都一样。原型:extern int strcmp(const void *s1, const void *s2);功能:用于比较两个字符串并根据比较结果返回整数。用法:基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str...原创 2019-10-28 14:31:35 · 20467 阅读 · 2 评论 -
应用单例启动实现(采用文件锁方式)
应用单例启动(采用文件锁方式)有时候我们的应用程序在系统中可能只允许启动一个(比如服务程序),怎么实现这种需求呢?思想:我们可以采用文件锁的方式,因为通过文件锁,可以保证同一时刻只有一个应用能占得文件资源,获取锁成功的可以执行,如果被其他进程占用时就不能执行。准备:有了思路后,剩下就是怎么操作设置文件锁了。用到网络锁,就不可避免要使用fcntl函数。fcntl函数,调用可以用来对已...原创 2019-10-24 17:44:55 · 428 阅读 · 0 评论