自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 pthread_create编译问题

注意点:头文件 #include <stdio.h> #include <pthread.h>编译参数gcc main.c -o main -lpthread

2019-10-18 11:30:08 585

原创 运算符优先级引发的血案

案例:比如我希望对一个23bit的字段进行单字节分离,如:typedef struct _AAA{ js_u32 a:1; // 用户操作策略 js_u32 b:23; // 用户规则号 js_u32 c:8; // 用户输出组号}AAA;希望对b这个域,做单字节分离,有问题的代码如下:uint8_t buf[17] = {0};me...

2019-10-17 09:55:47 376 1

原创 C++全局变量在本文件内部和外部.cpp文件中的定义与使用

记录:情景:基于c++的代码:工程中有2个.cpp文件,分别为a.cpp、b.cpp,我希望在b.cpp中声明并初始化几个全局变量bbb1、bbb2、bbb3,同时这几个全局变量的值我需要在a.cpp中得到。需要做的工作:在b.h中定义全局变量,采用private的形式:private: js_u8 bbb1; js_u8 bbb2; js_u8 bbb3;定义获...

2019-09-29 17:18:24 1862

原创 查找某个目录下.c文件包含某个字符串的结果

find ./ -name "*.c" | xargs grep -nrws "rte_eal_init"xargs:find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部。grep -nrws:n: 在显示符合样式的那一行之前,标示出该行的列数编号。r:当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作w:匹配...

2019-09-16 20:32:52 532

原创 centos7 安装DPDK

参考:https://blog.csdn.net/weixin_28712713/article/details/100804163下载DPDK安装包我是下载的最新版本,dpdk-19.08,放在定义的目录下,解压:tar -xvf dpdk-19.08.tar.xz dpdk-19.08环境变量配置在dpdk-19.08下,创建一个dpdkenv的文件,在里面填充如下内容:1. ex...

2019-09-16 18:18:54 2761

原创 centos7下搭建samba

参考:https://www.cnblogs.com/muscleape/p/6385583.html分几步走:防火墙关闭 [zuoyp@localhost ~]$ systemctl stop firewalld.service [zuoyp@localhost ~]$ systemctl disable firewalld.service Removed symlink /e...

2019-09-16 15:29:50 337

原创 break和continue

breakbreak直接跳过后面的处理,跳出当前循环。break的作用域(如果他在多层循环内,那么只作用于最内层循环)①情况1:②情况2:continuecontinue不处理后续语句,直接开始一次新的循环;continue也只会影响最内层的循环;①情况1:②情况2:注意:这里指的都是跳出循环,对于if这类判断是不care的。...

2019-09-16 10:37:58 254

转载 linux-tcpdump抓包命令;

转载:https://linux.cn/article-10191-1.html讲的很详细,不错的一篇文章。

2019-09-15 16:51:58 125

原创 字符常量/字符变量 计算sizeof

字符常量如‘a’,用sizeof计算出来是1还是4?#include <stdio.h> int main(void){ printf("sizeof = %d\n", sizeof('a')); return 0;} 结果是:换种写法再看看:#include <stdio.h> int main(void){ ...

2019-09-12 15:40:39 842

原创 while、for循环

while学习while过程中,看到c primer plus最后介绍到:当你需要写一个计数while循环时需要具备3个要素:1.必须初始化一个计数器;2.必须计数器去和一个固定值作比较;3.每次执行循环,计数器的值必须递增;FEP:int num = 10;int i = 0;while(i < num){ ···xxx···; i++;}其实这里的三...

2019-09-11 17:28:02 222

原创 野指针和内存泄漏

野指针野指针是指指针变量在声明后未对其地址进行初始化,因为指针在声明后,它的地址都是随机指向的,如果不初始化成正确的值,会造成野指针的出现。还有就是在free或delete之后,没有对指针变量赋值为NULL。因为free或delete只是删除了这个指针所指向的内存,但是指针变量本身是存在的。通常判断一个指针是否合法,都是使用if语句测试该指针是否为NULL。规避:在声明指针变量后,...

2019-09-10 16:19:43 173

翻译 括号能否强制改变计算顺序

一般来讲,不行。f() + g() * h()尽管我们知道乘法运算在加法之前, 但这并不能说明这三个函数哪个会被首先调用。如果你需要确保子表达式的计算顺序, 你可能需要使用明确的临时变量和独立的语句。但是有一个比较特殊的地方,就是对于&&和||来说,他们只需要检测自己运算符的左边如果已经能决定结果,那么他们就不会再计算右边的表达式。&&对应于假,||对应于真。...

2019-09-10 15:52:43 726

原创 offsetof

这是一个C语言已有的库函数。在 <stddef.h>中。它的作用是计算成员变量在结构体中的偏移量。FEP:#include <stddef.h> #include <stdio.h> ...

2019-09-10 14:41:22 714

原创 size_t

size_t 是作为sizeof运算符的返回值它并不是一个新类型,其实是由typedef来实现的。typedef double aaa;是对double类型声明了新别名叫做aaa;size_t也是一样,typedef unsigned int size_t;或typedef unsigned long表明对unsigned int或unsigned long起了一个叫size_t的别名;在打印...

2019-09-09 16:11:29 616 2

原创 32位机和64位机各类型所占sizeof

通过sizeof可以算出来。32位编译器: char :1个字节 char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器) short int : 2个字节 int: 4个字节 unsigned int : 4个字节 float: 4个字节 double: 8个字节 long: 4个字节 ...

2019-09-01 22:09:00 721

原创 增加头文件编译不过的问题

情景:在a.c对应的a.h中增加头文件xxx.h,但是一直提示In file included from a.c:25:0:a.h:4:35: 致命错误:xxx.h:没有那个文件或目录 #include <xxx.h>分析:反复确认头文件名称 - - - 没错。经过询问同事,是因为在a.c所在文件的makefile中的CFLAGS没有增加对xxx.h路径的编译选项...

2019-08-26 17:46:23 974

原创 数组与指针

关于数组首地址问题定义一个char型数组char a[3] = {'1', '2', '3'};。Q1:a,a + 1,&a,&a+1有什么区别?A1:首先a,我们一般用数组名来表示这个数组的首地址,但其实这是不太准确的。a代表的实际山是数组首元素的首地址,而real的数组首地址是用&a来表示的。虽然他们两个的值相同,但意义是不一样的,不一样在哪里呢?下个问题解答。...

2019-08-23 14:04:00 155

原创 strcpy/strncpy/strcat/strncat/memcpy这类库函数

首先列出这些常用库函数的函数原型strcmpstring.hint strcmp(const char *s1, const char *s2);负数、零还是正整数,依赖于 s1 所指向的字符串是小于、等于还是大于 s2 所指的字符串。strncmpstring.hint strcmp(const char *s1, const char *s2, size_t n);负整数、零还...

2019-08-22 18:06:44 249

原创 大小端问题

A:什么是大端、小端?Q:大端:低地址存放高字节。小端:低地址存放低字节。高字节/低字节:比如0x12345678,那么0x12是高字节,0x78是低字节。大端机器存放上述为0x12345678;小端存放为:0x78563412。A:如何判断一个机器是大端还是小端Q:使用联合体;因为联合体是共享同一块内存地址的,在同一块内存地址同时存放2个字节和1个字节,那么通过观察那1个字节的值,就可...

2019-08-22 15:51:08 168

原创 指针常量 常量指针 const

情况1:常量指针(前有狼)看名字,常量在前,修饰指针,所以表达式为const int * p;因为const修饰的是int,所以表示这个p的值是常量,是无法被修改的(这种操作是不对滴:*p = 1;),但p所存放的地址是可以修改的(这种操作就是对滴了:p = 0x111;)。情况2:指针常量(后有虎)看名字,常量在后,跟上面反着的,表达式为int * const p;因为const修饰的...

2019-08-22 15:38:53 151

原创 static

参考:https://www.cnblogs.com/stoneJin/archive/2011/09/21/2183313.htmlstatic的作用隐藏定义成“静态”,就表示对外部是不可见的。比如静态局部 他的可见域就是在本函数内。对外部其他函数不可见。比如静态全局 他的可见域就是在本.C文件内且是从他定义的位置开始往下。对外部其他文件不可见。保值“保值”意思就是一旦...

2019-08-22 14:34:09 121

原创 各类变量类型的范围

有符号类型名称字节数取值范围signed char1-128~+127short int2-32768~+32767int4-2 147 438 648~+2 147 438 647long int4-2 147 438 648 ~ +2 147 438 647long long int8-9 223 372 036 854 ...

2019-08-21 14:40:28 502 1

原创 关于main函数

每个函数都要有函数体,但main函数可以是空的,什么内容都没有。但是这样的函数有什么作用?void main() {}问:它的作用在哪?答:没作用?那不能。当你的.C文件包含很多函数时,你可以在里面声明一些空函数,确定需要完成的工作,把思路通过定义空函数的方式整理出来,后续再往这些空函数接口中填充代码。这样可以帮助你条理、系统的建立程序。...

2019-08-21 10:06:22 480

原创 预处理指令

符号“#”就表示这是一个预处理指令。他告诉编译器在编译程序之前要先执行“#”后跟着的动作。预处理指令很多,大都放在头文件中。所以定义的许多宏(#define xxx xxx),按规定是不被允许放在.C文件内的。比如#include <stdio.h>,stdio 是 standard input/output缩写。头文件命不区分大小写...

2019-08-21 09:59:08 162

原创 fwrite、fopen、fread操作结构体

函数原型size_t fwrite(const void *ptr, size_t size, size_t nobj, FILE *stream)fwrite 函数从 ptr 指向的数组中读取 nobj 个长度为 size 的对象,并输出到流 stream 中。它返回输出的对象数目。如果发生错误,返回值会小于 nobj 的值。size_t fread(void *ptr, size_t ...

2019-08-02 15:02:37 1123

原创 比较字符串 strcmp

错误示范这里比较的并不是2者的内容,而是string和"value"的地址是否一致;正确示范strcmp函数原型:函数体内部实现:strcmp(const* char1, const* char2) { while((char1 != '\0') && (char1 == char2)) { char1++; char2++ } int i...

2019-08-02 09:45:45 492

原创 main的返回值问题

main的返回值只能是int型,不能是其他类型比如void,所以在声明main时,只能有两种方法:int main(void);或int main(int argc, char **argv);

2019-08-01 18:05:20 266

原创 如何用typedef定义一对相互引用的结构?

有问题的版本希望在AP结构体中,引用BP,但是编译器会报错:因为在编译器第一次遇到BP时,BP还未定义。解决办法第一步我们不使用typedef,直接使用struct来定义结构a和结构b:这样的结果在编译时是可以通过的:相当于a, b 在这里都是空声明;第二步在用typedef 去定义两个类型:OK,可以编译通过。这样就解决了用typedef互相引用冲突的问题了。总结...

2019-08-01 16:26:38 590

原创 关于typedef和#define的区别

概念typedef关键字是用来定义新的类型名称,而不是定义新的变量或函数;#define:在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”;使用与区别一般最好使用typedef,因为在涉及指针类型名称的声明时,他可以很好地处理;比如:typedef char* string_a;#define string_b char*;string_a s1...

2019-07-31 16:24:03 147

原创 给线程传递参数+pthread_join理解

为什么要这么做因为通过pthread_create接口可以看到int pthread_create(pthread_t *tidp, const pthread_attr_t *attr, (void*)(*start_rtn)(void*), void *arg);线程调用的接口start_rtn,是void *型,无法通过参数本身传递数据,而应该使用线程参数传递一个结构体或变量的指针来实现参...

2019-07-31 11:04:57 1290

原创 多线程创建

概念所有这些线程在同一个进程中执行同一个程序,但是每个线程在特定时间点上可能分别执行这个程序的不同部分。创建和被创建的线程同先前一样共享内存空间、文件描述符和其它各种系统资源。例如, 当一个线程修改了一个变量的值,随后其它线程就会看到这个修改过的值。相似的,如果一个线程关闭了一个文件描述符,其它线程也无法从这个文件描述符进行读或写操作。因为一个进程中所有线程只能执行同一个程序,如果任何一个线程...

2019-07-30 18:00:24 76

转载 僵尸进程与孤儿进程

参考博文:https://www.cnblogs.com/sinpo828/p/10913249.html

2019-07-30 16:01:25 61

原创 Linux中关于信号的学习

定义信号首先是由一堆宏定义来声明的,它们存放在/usr/include/bits/signum.h中。其中,比较常用的SIGINT、SIGABRT、SIGBUS、SIGKILL、SIGSEGV、SIGSYS;使用进程可以相应系统发来的信号,同时也可以向其他进程发送信号。当操作错误总线或出现段错误时,就会收到系统的SIGBUS、SIGSEGV的信号;如果你想对其他进程进行“嘿嘿嘿”的动作时...

2019-07-30 15:42:42 87

原创 关于gcc的一些学习

参考博客:https://blog.csdn.net/BobYuan888/article/details/88709449编译4步C源文件到可执行文件共经历了4个过程。包括预处理、编译、汇编、链接。为了方便好记,可以采用记录单条编译命令的方式,这样可以把命令也一起记下来。比如(ESCO)。预处理# gcc -E main.c > main.igcc --h的解释:-E ...

2019-07-30 11:42:03 233

原创 关于git提交流程

这里只简单讲下git提交基础流程git 提交流程# git pull //拉取远端最新的代码到本地# git status //查看当前状态(包括修改的文件,后续提交结束在执行这个命令会提示“干净的工作区”)如果代码可编译,为确保无误,可以先到对应目录下执行编译,保证能编过。编译完成。通过#git status命令精选查看当前待修改点:[root@localhost libjs_j...

2019-07-29 15:46:48 152

原创 异常返回时释放内存

如题其实这个是一个细节问题,比如申请了一段内存,但是在中途返回了,这时如果忘记对之前申请的内存进行释放,后续其他地方访问到这里会造成内存泄漏。例如#include <fcntl.h>#include <stdlib.h>#include <sys/stat.h>#include <sys/types.h>#include <uni...

2019-07-24 14:33:10 175

原创 回调函数

定义简单来说,回调函数是由别人的函数执行时调用你实现的函数。函数指针作为某个函数的参数。函数指针变量可以作为某个函数的参数来使用的,回调函数就是一个通过函数指针调用的函数。以下是来自知乎作者常溪玲的解说:你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调...

2019-07-23 18:47:16 141

原创 关于函数指针与指针函数

概念函数指针:是指向函数的指针变量。通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。函数指针可以像一般函数一样,用于调用函数、传递参数。指针函数:顾名思义就是带有指针的函数,即其本质是一个函数,只不过这种函数返回的是一个对应类型的地址。声明函数指针变量typedef int (*fun_ptr)(int,int); // 声明一个指向同样参数、返回值的...

2019-07-23 18:25:35 182

原创 关于likely、unlikely、__builtin_expect的学习

likely、unlikely、__builtin_expect的关系#define likely(x) __builtin_expect((x),1)#define unlikely(x) __builtin_expect((x),0)

2019-07-17 18:07:59 356

原创 assert

关于assert系统函数assert使用assert一般用于检测函数参数的合法性,攻城狮们可以自己封装Assert作为宏,比如:#define Assert(condition){ if (condition){ NUll; } else { Assert(__FILE__ , __LINE__); }} while(0)调用时,像这样:void Test(uns...

2019-07-15 16:58:23 2180

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除