C
Prime吉吉
业精于勤荒于嬉,行成于思毁于随。
展开
-
解决 cppcheck sscanf() without field width limits can crash with huge input data.
该问题是cppcheck检测出使用sscanf函数时,开发人员未对匹配的字符串做长度限制导致的举个栗子#include <stdio.h>int main(){ char ip[16] = {0}; char name[32] = {0}; char tel[255] = {0}; char detail[400] = "172.16.117.121-Primeprime-18888888888"; sscanf(detail, "%[^-原创 2021-11-25 15:02:12 · 2907 阅读 · 0 评论 -
安装cppcheck 1.84
1.下载cppcheck1.84https://sourceforge.net/projects/cppcheck/files/cppcheck/1.84/cppcheck-1.84.tar.gz/download2.解压cppcheck1.84tar -zxvf cppcheck-1.84.tar.gz3.安装cppcheckcd cppcheck-1.84#编译make SRCDIR=build CFGDIR=/usr/share/cppcheck/ -j32#安装ma原创 2021-07-20 11:35:45 · 350 阅读 · 0 评论 -
结构体对齐方式总结
结构体对齐方式有以下两种设置方法:1、#pragma pack(n) //n为对齐格式的字节数 #pragma pack() //取消对齐格式操作举例说明使用#pragma pack(1)以一字节对齐#include <stdio.h>#pragma pack(1)typedef struct user_info{ int age; char sex; char name[14];} user_infos;int main(...原创 2021-03-31 23:48:53 · 651 阅读 · 0 评论 -
linux c __sync_fetch_and_add函数族详解
本文转自:https://blog.csdn.net/hzhsan/article/details/25124901我是在现在的公司里第一次遇到__sync_fetch_and_add函数,才知道还有线程无锁化的函数,于是在网络上搜集资料:__sync_fetch_and_add系列一共有十二个函数,有加/减/与/或/异或/等函数的原子性操作函数,__sync_fetch_and_add,顾名思义,先fetch,然后自加,返回的是自加以前的值。以count = 4为例,调用__sync_fetch_转载 2020-08-31 23:07:25 · 6055 阅读 · 0 评论 -
#program编译器指令详解
每种C和C++的实现支持对其宿主机或操作系统唯一的功能。例如,一些程序需要精确控制超出数据所在的储存空间,或着控制特定函数接受参数的方式。#pragma指示使每个编译程序在保留C和C++语言的整体兼容性时提供不同机器和操作系统特定的功能。编译指示被定义为机器或操作系统特定的,并且通常每种编译程序是不同的。语法:#pragma token_string“token_string”是一系列...转载 2020-03-26 09:32:50 · 8075 阅读 · 0 评论 -
signal(SIGPIPE, SIG_IGN)解析
转自:http://blog.163.com/niuxiangshan@126/blog/static/170596595201221942952676/http://www.360doc.com/content/11/0604/09/4363353_121584610.shtml我写了一个服务器程序,在Linux下测试,然后用C++写了客户端用千万级别数量的短链接进行转载 2017-11-24 10:48:22 · 1862 阅读 · 0 评论 -
strtok函数和strtok_r函数
注:本文转载自博客园,感谢作者整理!1.一个应用实例网络上一个比较经典的例子是将字符串切分,存入结构体中。如,现有结构体typedef struct person{ char name[25]; char sex[10]; char age[4]; }Person;需从字符串 char buffer[INFO_MAX_SZ]=转载 2016-06-14 16:58:27 · 6035 阅读 · 0 评论 -
数据结构之位图(bitmap)详解 (转)
1. 概述位图(bitmap)是一种非常常用的结构,在索引,数据压缩等方面有广泛应用。本文介绍了位图的实现方法及其应用场景。2. 位图实现(1)自己实现在位图中,每个元素为“0”或“1”,表示其对应的元素不存在或者存在。复制代码代码如下:#define INT_BITS sizeof(int) #define SHIFT 5转载 2016-07-14 10:34:37 · 5734 阅读 · 0 评论 -
strtok_r使用方法
#include char *strtok(char *str, const char *delim); char *strtok_r(char *str, const char *delim, char **saveptr); 先讲解下strtok_r函数参数,参数一str是我们需要处理的字符串,delim是分隔符,saveptr原创 2016-06-16 21:35:43 · 2831 阅读 · 0 评论 -
多线程不安全函数
转自:http://blog.csdn.net/caohao2008/article/details/6981423这几天调bug,该bug的特点是随机出现,而且不可重现!找了一天之后,终于发现,是因为在多线程函数中用了线程不安全的strtok函数导致的。从网上搜了些资料,多线程环境小心多线程不安全函数:strtok、asctime、ctime、gmtime and soo转载 2016-05-06 09:50:48 · 2441 阅读 · 0 评论 -
*p++与(*p)++与*(p++)(转)
转自:http://blog.csdn.net/niuyongjie/article/details/2490869这个问题其实是论述*P++等价于(*p)++还是等价于*(p++)的问题,为了验证这个问题,我编写了下面的小程序(vc++6.0编译环境),作为验证程序1#include "stdio.h"void main(){ int a=2; i转载 2016-04-12 10:59:54 · 523 阅读 · 0 评论 -
sizeof和sizeof(string)的问题
转自:http://www.cnblogs.com/wanghetao/archive/2012/04/04/2431760.html今天看《程序员面试宝典》一书(为了应付将要到来的微软笔试),看到了sizeof(string)这个问题。在Dev C++上测试的结果是4,很不明白。上网搜了一下,得到如下结果:string strArr1[]={"Trend", "Micro", "转载 2016-03-14 21:33:09 · 451 阅读 · 0 评论 -
全局变量 局部变量 静态变量的区别
C++变量根据定义位置的不同,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件作用域。从作用域看:全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包括全局变量定义的源文件需要用extern关键字再次声明这个全局变量。静态局部变量具有局部作用域。它只被初始化一次,自从第一次初始化直到程序与你新内阁结束都一转载 2016-03-22 08:34:49 · 554 阅读 · 0 评论 -
select、poll、epoll之间的区别总结[整理]
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用转载 2016-02-17 23:28:57 · 360 阅读 · 0 评论 -
IO多路复用之poll总结
1、基本知识 poll的机制与select类似,与select在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数量的限制。poll和select同样存在一个缺点就是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大。2、poll函数转载 2016-02-17 23:26:18 · 367 阅读 · 0 评论 -
malloc calloc realloc alloc区别
C语言跟内存分配方式 (1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 (2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 (3)从堆上分配,亦称动态内转载 2016-03-04 00:30:44 · 941 阅读 · 0 评论 -
常用文件操作函数总结
/*************压缩文件操作*************************/ //------------------------------------------------------------------- ----------------- // 函数名: gzopen // 功能描述: 打开原创 2016-09-22 09:21:15 · 1526 阅读 · 4 评论 -
rindex函数和strrchr函数的区别
index系列函数和strchr系列函数都是用来 查找字符串中出现的指定一个字符连它们的声明也几乎一样 #include char *index(const char *s, int c); char *rindex(const char *s, int c);和 #include char *strc转载 2016-10-26 09:02:24 · 1837 阅读 · 0 评论 -
linux c 创建多级目录函数实现 支持绝对路径和相对路径
#include #include #include #include /** * \function MakeDir * \author PengWeizhe * \date * \param [in] path 待创建的目录绝对路径 * \return 0 创建成功 1创建失败 * \details 创建一个目录(单极、多级) */int makeDir原创 2016-10-27 10:53:43 · 5640 阅读 · 2 评论 -
位域详解
本文转自:https://blog.csdn.net/lzeleven/article/details/70304445有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态,用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域...转载 2019-02-09 13:46:48 · 2184 阅读 · 0 评论 -
C/C++浮点数在内存中的存储方式(转)
本文转自:https://www.cnblogs.com/dolphin0520/archive/2011/10/02/2198280.html C/C++浮点数在内存中的存储方式 任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二...转载 2019-02-01 15:09:29 · 298 阅读 · 0 评论 -
fopen函数详解
本文转自:https://blog.csdn.net/borenbao/article/details/8496401.2 文件的输入输出函数 键盘、显示器、打印机、磁盘驱动器等逻辑设备, 其输入输出都可以通过文件管理的方法来完成。而在编程时使用最多的要算是磁盘文件, 因此本节主要以磁盘文件为主, 详细介绍Turbo C2.0提供的文件操作函数, 当然这些对文件的操作函数也适合于非磁...转载 2019-01-25 15:17:25 · 11439 阅读 · 0 评论 -
extern "C"的使用详解(转)
extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般之包括函数名。 这个功能十分有...转载 2018-11-13 09:57:51 · 288 阅读 · 0 评论 -
内存详解(转)
本文转自:https://www.cnblogs.com/yif1991/p/5049638.html在计算机系统,特别是嵌入式系统中,内存资源是非常有限的。尤其对于移动端开发者来说,硬件资源的限制使得其在程序设计中首要考虑的问题就是如何有效地管理内存资源。本文是作者在学习C语言内存管理的过程中做的一个总结,如有不妥之处,望读者不吝指正。一、几个基本概念 在C语言中,关于内存管理的知...转载 2018-09-17 17:36:38 · 530 阅读 · 0 评论 -
C/C++在不同操作系统中基本数据类型所占字节数
各个类型的变量长度由编译器来决定(实际上与操作系统位数和编译器都有关)使用时可用sizeof()得到,当前主流编译器一般是32位或64位。 类型 16位 32位 64位 char 1 1 1 short int 2 2 2 int 2 4 4 long i...原创 2018-05-08 23:32:33 · 1837 阅读 · 0 评论 -
守护进程详解及创建,daemon()使用(转载)
一,守护进程概述Linux Daemon(守护进程)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务。Linux系统的大多数服务器就是通过守护进程实现的。常见的守护进程包括系统日志进程syslogd、 web服务器httpd、邮件服务器sendmail和数据库服务器m转载 2018-01-10 19:28:41 · 702 阅读 · 0 评论 -
Linux下getopt()函数的简单使用(转载)
最近在弄Linux C编程,本科的时候没好好学啊,希望学弟学妹们引以为鉴。好了,虽然啰嗦了点,但确实是忠告。步入正题:我们的主角----getopt()函数。英雄不问出处,getopt()函数的出处就是unistd.h头文件(哈哈),写代码的时候千万不要忘记把他老人家include上。 再来看一下这家伙的原型(不是六耳猕猴):int getopt(i转载 2018-01-05 17:59:31 · 408 阅读 · 0 评论 -
linux deamon函数使用方法说明
转自http://blog.chinaunix.net/uid-20196318-id-94985.html其实,linux提供了daemon函数用于创建守护进程#includeint daemon(int nochdir, int noclose);1. daemon()函数主要用于希望脱离控制台,以守护进程形式在后台运行的程序。2. 当nochdir为0转载 2017-11-24 10:51:37 · 790 阅读 · 0 评论 -
avro-c的编译安装和使用(转)
avro下载:http://www.apache.org/dyn/closer.cgi/avro/ (这里有好多的可以下载的网址,一般第一个最好,后面的都是备份和第一个一样。)avro-c的api简介官网:http://avro.apache.org/docs/current/api/c/ (官网上面也没有把全部的api说明白。)转载 2017-04-01 09:16:19 · 1808 阅读 · 0 评论 -
socket阻塞与非阻塞,同步与异步、I/O模型
版权声明:本文转自http://blog.csdn.net/hguisu/article/details/7453390目录(?)[+]socket阻塞与非阻塞,同步与异步作者:huangguisu1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)转载 2016-03-02 17:03:58 · 419 阅读 · 0 评论 -
多线程 Linux c
学东西,往往实例才是最让人感兴趣的,老是学基础理论,不动手,感觉没有成就感,呵呵。 下面先来一个实例。我们通过创建两个线程来实现对一个数的递加。或许这个实例没有实际运用的价值,但是稍微改动一下,我们就可以用到其他地方去拉。下面是我们的代码:/*thread_example.c : c multiple thread programming in linux转载 2016-03-02 11:36:22 · 596 阅读 · 0 评论 -
__attribute__((packed))详解
__attribute__((packed))详解标签: it分类: linux程序1. __attribute__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法。这个功能是跟操作系统没关系,跟编译器有关,gcc编译器不是紧凑模式的,我在windows下,用vc的编译转载 2016-02-09 10:04:40 · 4674 阅读 · 0 评论 -
Win32开发之Format MessageBox 详解(转)
本文介绍在Windows程序开发中的MessageBox详解。 我们在在Windows程序设计中经常会涉及到一个格式化消息框,其代码如下:#include #include #include int CDECL MessageBoxPrintf (TCHAR * szCaption, TCHAR * szFormat, ……){转载 2015-02-28 10:19:59 · 541 阅读 · 0 评论 -
va_start和va_end使用详解(转)
本文主要介绍va_start和va_end的使用及原理。 在以前的一篇帖子Format MessageBox 详解中曾使用到va_start和va_end这两个宏,但对它们也只是泛泛的了解。 介绍这两个宏之前先看一下C中传递函数的参数时的用法和原理: 1.在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表void foo(转载 2015-02-28 10:16:36 · 656 阅读 · 0 评论 -
statfs获得硬盘使用情况 模拟linux命令 df(转)
先说statfs结构:#include /* 或者 */int statfs(const char *path, struct statfs *buf); int fstatfs(int fd, struct statfs *buf);参数: path: 位于需要查询信息的文件系统的文件路径名(不是设备名,是挂载点名称)。 fd: 位于需要查询信息的文件系统的文件描述词。 buf:以下结构体的指针转载 2015-01-23 17:59:38 · 1149 阅读 · 0 评论 -
同步与异步IO、阻塞与非阻塞IO(转载)
同步与异步IO、阻塞与非阻塞IO(转载)很多时候我们常常看到同步与异步,阻塞与非阻塞的出现。有的地方直接将同步与阻塞画上了等号。异步与非阻塞画上了等号。事实上这是不对的。同步不等于阻塞,而异步也不等于非阻塞。下面就来仔细的看看同步与异步、阻塞与非阻塞的概念差别,及他们的组合应用。同步:所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。按照这个定义,其实绝大多数转载 2014-12-29 23:24:21 · 641 阅读 · 0 评论 -
ping的实现 linux c
这是一个简易的Ping源码实现,现在和大家分享一下#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #i原创 2014-12-28 22:26:03 · 854 阅读 · 0 评论 -
strtok 与 strsep 函数说明(转)
这几天处理字符串,突然遇到字符串分割问题,上网查了一些资料后,找到这两个函数,strtok与strsep函数。网上举的例子千篇一律,下面我根据函数的实现源码,记录一下使用说明,供大家讨论,欢迎大牛拍砖!PS:找个库函数源码的在线查询网站真不容易,先找到了这个http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/?cvsroot=glibc之后,转载 2015-01-15 20:02:02 · 662 阅读 · 0 评论 -
write的奥秘
coly(李勇)http://www.linuxforum.net/doc/write-coly.html 在Linux下我们在使用设备的时候,都会用到write这个函数,通过这个函数我们可以象使 用文件那样向设备传送数据。可是为什么用户使用write函数就可以把数据写到设备里面 去,这个过程到底是怎么实现的呢? 这个奥秘就转载 2015-02-02 20:26:41 · 707 阅读 · 0 评论 -
制作mipsel-linux交叉编译工具(转)
1 前言 在嵌入式开发中,MIPs处理器是常见的几中处理器类型之一。另一方面,Linux是开源软件,应用范围很广, 因其对包括MIPS在内的多种嵌入式处理器架构的良好支持. 因此在嵌入式应用也.也大量采用Linux。在嵌入式开发过程中,很容易获得运行于x86架构PC上的Linux,并可使用其上的丰富的工具。gcc是Linux中一个很著名的C编译器,在编译Linux核心时,就要用到gcc。转载 2015-01-09 19:43:30 · 947 阅读 · 0 评论