C 编程
sukhoi27smk
学习是为了探索这个世界的本质
展开
-
TLS回调函数的两种写法
【代码】TLS回调函数的两种写法。原创 2023-06-28 19:11:07 · 345 阅读 · 0 评论 -
log4c cmakelist.txt config.h
【代码】log4c cmakelist.txt config.h。原创 2023-06-13 09:49:23 · 255 阅读 · 0 评论 -
进程和线程
01什么是进程?标准定义:进程是一个具有一定独立功能的程序在一个数据集合上依次动态执行的过程。进程是一个正在执行程序的实例,包括程序计数器、寄存器和程序变量的当前值。简单来说进程就是一个程序的执行流程,内部保存程序运行所需的资源。在操作系统中可以有多个进程在运行,可对于CPU来说,同一时刻,一个CPU只能运行一个进程,但在某一时间段内,CPU将这一时间段拆分成更短的时间片,CPU不停的在各个进程间游走,这就给人一种并行的错觉,像CPU可以同时运行多个进程一样,这就是伪并...转载 2021-06-02 18:59:22 · 321 阅读 · 0 评论 -
内联汇编用法
在 Linux 代码中,经常可以看到在 C 代码中,嵌入部分汇编代码,这些代码要么是与硬件体系相关的,要么是对性能有关键影响的。在很久以前,我特别惧怕内嵌汇编代码,直到后来把汇编部分的短板补上之后,才彻底终结这种心理。也许你在工作中,几乎不会涉及到内嵌汇编代码的工作,但是一旦进入到系统的底层,或者需要对时间关键场景进行优化,这个时候你的知识储备就发挥重要作用了!这篇文章,我们就来详细聊一聊在 C 语言中,如何通过 asm 关键字来嵌入汇编语言代码,文中的 8 个示例代码从简单到复杂,逐步深入地介转载 2021-06-02 18:16:30 · 890 阅读 · 0 评论 -
linux C 中的volatile使用
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自动变量(Non-automati转载 2014-07-21 17:13:24 · 1764 阅读 · 0 评论 -
snprintf函数用法
int snprintf(char *restrict buf, size_t n, const char * restrict format, ...);函数说明:最多从源串中拷贝n-1个字符到目标串中,然后再在后面加一个0。所以如果目标串的大小为n 的话,将不会溢出。函数返回值:若成功则返回欲写入的字符串长度,若出错则返回负值。Result1(推荐的用法)#include转载 2014-07-29 13:50:27 · 689 阅读 · 0 评论 -
状态机思路在程序设计中的应用
状态机思路在单片机程序设计中的应用状态机的概念状态机是软件编程中的一个重要概念。比这个概念更重要的是对它的灵活应用。在一个思路清晰而且高效的程序中,必然有状态机的身影浮现。比如说一个按键命令解析程序,就可以被看做状态机:本来在A状态下,触发一个按键后切换到了B状态;再触发另一个键后切换到C状态,或者返回到A状态。这就是最简单的按键状态机例子。实际的按键解析程序会比这更复杂些转载 2015-01-27 14:40:12 · 733 阅读 · 0 评论 -
strdup函数的用法
函数名: strdup功 能: 将串拷贝到新建的位置处用 法: char *strdup(char *str); 这个函数在linux的man手册里解释为:The strdup() function returns a pointer toa new string which is aduplicate of the string s. Memo转载 2015-02-08 16:04:52 · 676 阅读 · 0 评论 -
Linux编程里getopt_long_only函数用法详解
在程序中难免需要使用命令行选项,可以选择自己解析命令行选项,但是有现成的,何必再造轮子。下面介绍使用getopt_long_only和getopt_long(两者用法差不多)解析命令行选项。程序中主要使用:短选项长选项是否需要参数-n--username是(用户名)指定用户名-d--debug否是否已测试转载 2015-02-08 15:31:38 · 1326 阅读 · 0 评论 -
信号中断 与 慢系统调用
1. 术语1.1. 慢系统调用(Slow system call)该术语适用于那些可能永远阻塞的系统调用。永远阻塞的系统调用是指调用永远无法返回,多数网络支持函数都属于这一类。如:若没有客户连接到服务器上,那么服务器的accept调用就会一直阻塞。慢系统调用可以被永久阻塞,包括以下几个类别:(1)读写‘慢’设备(包括pipe,终端设备,网络连接等)。读时,数据不存在转载 2015-01-22 16:25:07 · 640 阅读 · 0 评论 -
C++变量命名规则
浅谈C++变量命名规则 不知道别的公司如何,反正我现在的公司对变量命名并没有一定的规范,唯一要求就是能简单易懂,但是,我想,这个多个程序员,大概每个人都有自己习惯的一套 命名规则吧,不过,要是并不通用的话,大概看别人的程序会很头疼吧,SO 为了别人看偶的程序不至于太头疼,偶决定找个通俗的命名法来参考下,于是,搜到了匈牙利命名法。。。匈牙利命名法的来历和介绍分类:C Plus Plus转载 2015-03-05 16:11:28 · 643 阅读 · 0 评论 -
Linux C 中字符串化操作符#
1 #include 2 3 #define dprint( expr ) printf( "%s = %d \n", #expr , expr) 4 5 int main(void) 6 { 7 int x = 100; 8 int y = 2; 9 10 dprint(x/y);11 dprint( x+y );12转载 2014-07-21 17:15:54 · 674 阅读 · 0 评论 -
Linux C 中连接操作符##
#include #define test(x) test ## x#define DPRINT( fmt, args...) \{ \ printf("File : %s Funtion : %s Line : %d \t", __FILE__, __FUNCTION__, __LINE__ );\ printf( fmt, ##args );\}转载 2014-07-21 17:14:03 · 995 阅读 · 0 评论 -
16进制字符串转化为10进制数
同学在MSN CDC电话面试(可惜我在被面试的时候全然没有这么具体的问题了:))中的一个题目:将16进制的字符串转化为10进制数字,例如“1A”,则对应26。题目很简单,实现起来也容易,依稀记得C里面有函数可以转化。刚好很久前有一个工作了的同学问起,自是给了一个方案。昨晚(050703)实在无聊,于是本着“写过才是自己的原则”,写了一个实现,其中对于16进制字符串非法的处理不是很好(返回-1),但转载 2012-12-12 17:40:38 · 1073 阅读 · 0 评论 -
C语言关键字----Const
C中CONST的使用: 虽然这听起来很简单,但实际上,const的使用也是c语言中一个比较微妙的地方,微妙在何处呢?请看下面几个问题。 问题:const变量 & 常量 为什么下面的例子在使用一个const变量来初始化数组,ANSI C的编译器会报告一个错误呢? const int n = 5; int a[n]; 答案与分析: 1)、这个问题讨论的是“常转载 2012-12-17 10:37:41 · 757 阅读 · 0 评论 -
字节序、位序
字节序 字节序,又称端序、尾序,英文单词为Endian,该单词来源于于乔纳森·斯威夫特的小说《格列佛游记》,小说中的小人国因为吃鸡蛋的问题而内战,战争开始是由于以下的原因:我们大家都认为,吃鸡蛋前,原始的方法是打破鸡蛋较大的一端。可是当今皇帝的祖父小时候吃鸡蛋,一次按古法打鸡蛋时碰巧将一个手指弄破了,因此他的父亲,当时的皇帝,就下了一道敕令,命令全体臣民吃鸡蛋时打破鸡蛋较小的一端,违令者转载 2012-12-17 10:44:30 · 639 阅读 · 0 评论 -
如果C++程序要调用已经被编译后的C函数,该怎么办?
C++语言支持函数重载,C 语言不支持函数重载。函数被C++编译后在库中的名字与C 语言的不同。假设某个C函数的声明如下:void foo(int x, int y);该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,C++程序不能直接调用C函数。C++提供了一个C连接交换指定符转载 2013-01-16 20:59:58 · 540 阅读 · 0 评论 -
关键字static、const、volatile的作用
关键字static的作用是什么?这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用:1、在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。2、 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所有函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。3、在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用转载 2013-01-16 21:00:34 · 566 阅读 · 0 评论 -
BSS段、数据段、代码段、堆与栈
BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。代码段:代码段(code segment/text segment)通常是指用转载 2013-04-26 09:11:39 · 657 阅读 · 2 评论 -
讲讲volatile的作用
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic转载 2013-05-10 15:14:23 · 610 阅读 · 0 评论 -
strpbrk函数
函数原型:extern char *strpbrk(char *str1, char *str2)参数说明:str1待比较的字符串,str2为指定被搜索的字符串。 所在库名:#include 函数功能:比较字符串str1和str2中是否有相同的字符,如果有,则返回该字符在str1中的位置的指针。 返回说明:返回指针,搜索到的字符在str1中的索引位置转载 2013-10-22 16:58:32 · 752 阅读 · 0 评论 -
Linux NULL定义
下面是/usr /include/linux下的stddef.h文件中的NULL定义:#undef NULL#if defined(__cplusplus)#define NULL 0#else#define NULL ((void *)0)#endif转载 2014-04-18 16:20:19 · 5257 阅读 · 0 评论 -
pthread_cond_wait的spurious wakeup问题
最近在温习pthread的时候,忽然发现以前对pthread_cond_wait的了解太肤浅了。昨晚在看《Programming With POSIX Threads》的时候,看到了pthread_cond_wait的通常使用方法:pthread_mutex_lock(); while(condition_is_false) pthread_cond_wait(); p转载 2014-05-16 16:15:29 · 622 阅读 · 0 评论 -
BSS段、数据段、代码段、堆与栈
BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。代码段:代码段(code segment/text segment)通常是指用转载 2012-11-18 12:50:56 · 379 阅读 · 0 评论