自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

化茧成蝶007

此时正在前进的路上

  • 博客(70)
  • 资源 (2)
  • 收藏
  • 关注

原创 suricata 源码详细讲解

从main函数开始https://my.oschina.net/openadrian/blog/184621

2017-08-31 11:14:04 1610

转载 C语言程序可以没有main函数

学习C语言的同学都知道,每个C程序要有一个main函数,程序从main函数开始执行,在main函数中结束。但事实上,C程序也可以没有main函数,或者说自己可以指定入口函数。下面这篇文章介绍了如何实现这一过程。这篇文章转自:http://www.codeweblog.com,作者不详。学习这个内容对程序设计没啥影响,但能更深入地了解程序编译和链接的原理。     这篇文章主要介绍了

2017-08-31 10:56:56 903

转载 【源码剖析】Webbench —— 简洁而优美的压力测试工具

Webbench 是一个古老而著名的网站压力测试工具,简单而实用。如果你不清楚你的网站能承受多大的压力,或者你想分析对比两个网站的性能,webbench 再好用不过了。安装:     很简单,cd 进项目主页后进行 make install clean 就好了。     用法:     想要知道用法可以在安装后直接输入 webbench 或 webb

2017-08-29 23:45:57 608

原创 fscanf 函数详解

fscanf位于头文件stdio.h>中,函数原型为int fscanf(FILE*stream, constchar*format, [argument...]); 其功能为根据数据格式(format)从输入流(stream)中写入数据(argument);与fgets的差别在于:fscanf遇到空格和换行时结束,注意空格时也结束,fgets遇到空格不结束。返回值:整型,成功返回读入的参

2017-08-29 23:29:19 697

原创 关于setvbuf()函数的详解

为什么要使用setvbuf函数 如果你的内存足够大,可以把文件IO的BUF设置大一些,这样每次你用fopen/fread/fwrite/fscanf/fprintf语句的时候,都会在内存里操作,减少内存到磁盘IO读写的操作次数,提高系统效率。 如果你的程序的功能涉及到类似数据库、视频、音频、图像处理等大量需要爆发式磁盘到内存的IO情况下,可以考虑用setvbuf进行优化内存IO,其

2017-08-29 23:15:08 7921

原创 getopt_long 函数详解

文件#include 函数原型int getopt_long(int argc, char * const argv[],const char *optstring,const struct option*longopts, int *longindex);函数说明getopt被用来解析命令行选项参数。getopt_long支持长选项的命令行解析,使

2017-08-28 22:48:31 1538 1

转载 CentOS 7 VM下修改网卡名为eth0并启动问题解决

环境1234win7 64bitVM workstation 10CentOS 7NAT模式访问网络,所有虚拟机都配置在同一个网段内即192.168.0.1~192.168.0.2542.查看并修改默认配置123

2017-08-28 11:07:44 1628

原创 \r 和 \n 和 \r\n的区别是?

#include #include int main(){        printf("hello world\n");        printf("hello\rworld\n");        printf("hello\r\nworld");        printf("hello world\r\n");        return 0;}

2017-08-27 22:58:23 343

原创 C++基础知识积累

访问控制和继承访问publicprotectedprivate同一个类yesyesyes派生类yesyesno外部的类yesnono一个派生类继承了所有的基类方法,但下列情况除外:基类的构造函数、

2017-08-26 19:53:49 128

原创 centos 下如何修改网卡名称

环境:centos 7.X 步骤1:  先编辑网卡的配置文件         1) vi/etc/sysconfig/network-scripts/ifcfg-eno1677736         2) 将NAME项修改为eth0步骤2:重命名该配置文件         1) cd/etc/sysconfig/network-scripts/

2017-08-26 12:07:47 358

转载 链接03

讲解的很不错===值得学习GCC 编译的背后http://www.tinylab.org/behind-the-gcc-compiler/

2017-08-26 00:30:54 176

转载 ELF 主体:节区02

下面来看看 ELF 文件的主体内容:节区(Section)。ELF 文件具有很大的灵活性,它通过文件头组织整个文件的总体结构,通过节区表 (Section Headers Table)和程序头(Program Headers Table 或者叫段表)来分别描述可重定位文件和可执行文件。但不管是哪种类型,它们都需要它们的主体,即各种节区。在可重定位文件中,节区表描述的就是各种节区本身

2017-08-26 00:06:04 502

原创 ELF 文件的结构01

目标代码不再是普通的文本格式,无法直接通过文本编辑器浏览,需要一些专门的工具。如果想了解更多目标代码的细节,区分 relocatable(可重定位)、executable(可执行)、shared libarary(共享库)的不同,我们得设法了解目标代码的组织方式和相关的阅读和分析工具。下面主要介绍这部分内容。BFD is a package which allows applica

2017-08-25 23:56:13 186

转载 readelf命令详解

readelf命令用来显示一个或者多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些信息。这里的elf-file(s)就表示那些被检查的文件。可以支持32位,64位的elf格式文件,也支持包含elf文件的文档(这里一般指的是使用ar命令将一些elf文件打包之后生成的例如lib*.a之类的“静态库”文件)。  这个程序和objdump提供的功能类似,但是它显示的信息更为具体,并且

2017-08-25 23:05:49 1474

原创 Gcc 编译的背后--预处理

预处理简述预处理是 C 语言程序从源代码变成可执行程序的第一步,主要是 C 语言编译器对各种预处理命令进行处理,包括头文件的包含、宏定义的扩展、条件编译的选择等。以前没怎么“深入”预处理,脑子对这些东西总是很模糊,只记得在编译的基本过程(词法分析、语法分析)之前还需要对源代码中的宏定义、文件包含、条件编译等命令进行处理。这三类的指令很常见,主要有 #define,#incl

2017-08-25 22:43:05 509

转载 setjmp 和 longjmp 使用方法

我们都知道要想在一个函数内进行跳转,可以使用 goto 语句(不知怎么该语句在中国学生眼中就是臭名昭著,几乎所有国内教材都一刀切地教大家尽量不要使用它,但在我看来,这根本不是语言的问题,而是使用该语言的人,看看 Linux 内核中遍地是 goto 语句的应用吧!),但如果从一个函数内跳转到另一个函数的某处,goto 是不能完成的,那该如何实现呢?函数间跳转原理我们要实现的一

2017-08-24 23:13:59 312

原创 C语言 一些不安全的库函数

那些不安全的库函数C 和 C++ 不能够自动地做边界检查,边界检查的代价是效率。一般来讲,C 在大多数情况下注重效率。然而,获得效率的代价是,C 程序员必须十分警觉以避免缓冲区溢出问题。C语言标准库中的许多字符串处理和IO流读取函数是导致缓冲区溢出的罪魁祸首。我们有必要了解这些函数,在编程中多加小心。一、字符串处理函数strcpy()strcpy()

2017-08-24 22:42:33 455

原创 C语言 输出

输出fputs用fputs()把一个字符串写入到文件中int fputs (char string, FILE fp) ;功能:把字符串string写入到文件fp中若fp为stdout,则为向屏幕输出。printfint printf ( char const format, …… ) ;int fprintf ( FILE fp, char con

2017-08-24 20:40:33 1322

原创 C语言 输入

流流是什么?形象的比喻——水流,文件和程序之间连接一个管道,水流就在之间形成了,自然也就出现了方向:可以流进,也可以流出。便于理解,这么定义流: 流就是一个管道里面有流水,这个管道连接了文件和程序。UNIX系统认为一切皆文件,所有的外部设备都被看做文件。C语言系统定义了三个默认的文件指针:1、stdin 即标准输入文件,与键盘连接。(即把键盘当做文件)2、std

2017-08-24 20:10:31 248

原创 C语言 输入

流流是什么?形象的比喻——水流,文件和程序之间连接一个管道,水流就在之间形成了,自然也就出现了方向:可以流进,也可以流出。便于理解,这么定义流: 流就是一个管道里面有流水,这个管道连接了文件和程序。UNIX系统认为一切皆文件,所有的外部设备都被看做文件。C语言系统定义了三个默认的文件指针:1、stdin 即标准输入文件,与键盘连接。(即把键盘当做文件)2、std

2017-08-23 23:51:38 287

原创 C语言 类型转换

类型转换在 C 语言的表达式赋值时,要小心背后默默的隐式类型转换,它们会导致隐藏的 Bug。C语言的整型提升规则C的整型算数运算总是至少以缺省整型类型的精度来进行的。为了获得这个精度,表达式中的字符型和短整型操作数在使用之前被转换为普通整型。例:char a,b,c ;a = b+c ;注意,根据整型提升规则,上面b和c的值被提升为普通整型,

2017-08-23 23:05:58 213

原创 C语言 函数指针

函数指针函数指针就是函数的指针。它是一个指针,指向一个函数。(即函数在内存中的起始位置地址)实际上,所有的函数名在表达式和初始化中,总是隐式地退化为指针。例:int r , (*fp)( ) , func( ) ;fp= func ; //函数名退化为指针r= (*fp)( ) ; //等价于r=fp( ) ;无论fp是函数名还是函数指针,都能正确工作。因为

2017-08-23 22:28:32 169

原创 C语言 数组与指针(二)

数组与指针的纠葛在C语言中,根据定义,表达式 e1[e2] 准确地对应于表达式 *((e1)+(e2))。因此,要求表达式 e1[e2] 的其中一个操作数是指针,另一个操作数是整数。且这两个操作数的顺序可以颠倒。故: a[4] 等同于 4[a] 等同于 *(a+4)*编译器把所有的e1[e2]表达式转换成 \((e1)+(e2))。所以,以下标的形式访问在本质上与以指针的形

2017-08-23 22:15:06 196

原创 C语言 数组与指针(一)

数组与指针(一)指针是 C 的精华,如果未能很好地掌握指针,那 C 也基本等于没学。先附上两句话:第一句话:指针就是存放地址的变量。(就是这么简单。)第二句话:指针是指针,数组是数组。(只是它们经常穿着相似的衣服来逗你玩罢了。)轻松一下:(见识一下数组和指针的把戏)1、引用一维数组某个值的方式:(先定义指针p=a)a[2]*(a+2)(&a[

2017-08-22 23:21:32 335 1

原创 Gcc 编译的背后

前言平时在 Linux 下写代码,直接用 gcc -o out in.c 就把代码编译好了,但是这背后到底做了什么呢?如果学习过《编译原理》则不难理解,一般高级语言程序编译的过程莫过于:预处理、编译、汇编、链接。gcc 在后台实际上也经历了这几个过程,可以通过 -v 参数查看它的编译细节,如果想看某个具体的编译过程,则可以分别使用 -E,-S,-c 和 -O,对应的后台工具

2017-08-22 21:58:51 434

原创 C 命令行参数

C 命令行参数执行程序时,可以从命令行传值给 C 程序。这些值被称为命令行参数,它们对程序很重要,特别是当您想从外部控制程序,而不是在代码内对这些值进行硬编码时,就显得尤为重要了。命令行参数是使用 main() 函数参数来处理的,其中,argc 是指传入参数的个数,argv[] 是一个指针数组,指向传递给程序的每个参数。下面是一个简单的实例,检查命令行是否有提供参数,并根据参数执行

2017-08-21 23:09:10 796

原创 C 内存管理

C 内存管理本章将讲解 C 中的动态内存管理。C 语言为内存的分配和管理提供了几个函数。这些函数可以在  头文件中找到。序号函数和描述1void *calloc(int num, int size);该函数分配一个带有 function allocates an array of num 个元素的数组,每个元素的大小为 size 

2017-08-21 23:06:11 142

原创 C 可变参数

C 可变参数有时,您可能会碰到这样的情况,您希望函数带有可变数量的参数,而不是预定义数量的参数。C 语言为这种情况提供了一个解决方案,它允许您定义一个函数,能根据具体的需求接受可变数量的参数。下面的实例演示了这种函数的定义。int func(int, ... ) { . . .}int main(){ func(1, 2, 3); func(1,

2017-08-21 22:35:33 223

原创 C 错误处理

C 错误处理C 语言不提供对错误处理的直接支持,但是作为一种系统编程语言,它以返回值的形式允许您访问底层数据。在发生错误时,大多数的 C 或 UNIX 函数调用返回 1 或 NULL,同时会设置一个错误代码 errno,该错误代码是全局变量,表示在函数调用期间发生了错误。您可以在 头文件中找到各种各样的错误代码。所以,C 程序员可以通过检查返回值,然后根据返回值决定采取哪种适

2017-08-21 22:23:14 196

原创 C 强制类型转换

C 强制类型转换强制类型转换是把变量从一种类型转换为另一种数据类型。例如,如果您想存储一个 long 类型的值到一个简单的整型中,您需要把 long 类型强制转换为 int 类型。您可以使用强制类型转换运算符来把值显式地从一种类型转换为另一种类型,如下所示:(type_name) expression请看下面的实例,使用强制类型转换运算符把一个整数变量除以另一个整数变量,得到

2017-08-21 22:20:04 297

原创 C 头文件

C 头文件头文件是扩展名为 .h 的文件,包含了 C 函数声明和宏定义,被多个源文件中引用共享。有两种类型的头文件:程序员编写的头文件和编译器自带的头文件。在程序中要使用头文件,需要使用 C 预处理指令 #include 来引用它。前面我们已经看过 stdio.h 头文件,它是编译器自带的头文件。引用头文件相当于复制头文件的内容,但是我们不会直接在源文件中复制头文件的内

2017-08-21 22:05:04 177

原创 C 预处理器

C 预处理器C 预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C 预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理。我们将把 C 预处理器(C Preprocessor)简写为 CPP。所有的预处理器命令都是以井号(#)开头。它必须是第一个非空字符,为了增强可读性,预处理器指令应从第一列开始。下面列出了所有重要的预处

2017-08-21 20:19:49 172

原创 C 文件读写

C 文件读写上一章我们讲解了 C 语言处理的标准输入和输出设备。本章我们将介绍 C 程序员如何创建、打开、关闭文本文件或二进制文件。一个文件,无论它是文本文件还是二进制文件,都是代表了一系列的字节。C 语言不仅提供了访问顶层的函数,也提供了底层(OS)调用来处理存储设备上的文件。本章将讲解文件管理的重要调用。打开文件您可以使用 fopen( ) 函数来创建一

2017-08-21 20:08:51 407

原创 C typedef

C 语言提供了 typedef 关键字,您可以使用它来为类型取一个新的名字。下面的实例为单字节数字定义了一个术语 BYTE:typedef unsigned char BYTE;在这个类型定义之后,标识符 BYTE 可作为类型 unsigned char 的缩写,例如:BYTE b1, b2;按照惯例,定义时会大写字母,以便提醒用户类型名称是一个象征性的缩写,但您也可

2017-08-21 19:59:32 192

转载 C语言中的 (void*)0 与 (void)0

前几天看到一个宏, 它大概是这样的:    #define assert_param(expr) ((expr) ? (void)0 : assert_failed((u8 *)__FILE__, __LINE__))  代码的含意简单, 关键是那个 (void)0 的用法, 我还是第一次见到(别笑).  我用 void 的时候, 有两种情况:    1.放到函数前面,

2017-08-20 08:14:46 6932 3

原创 C 共用体

共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。定义共用体为了定义共用体,您必须使用 union 语句,方式与定义结构类似。union 语句定义了一个新的数据类型,带有多个成员。union 语句的格式如下:union [union tag]

2017-08-19 21:53:47 166

原创 位域

有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例如在存放一个开关量时,只有 0 和 1 两种状态,用 1 位二进位即可。为了节省存储空间,并使处理简便,C 语言又提供了一种数据结构,称为"位域"或"位段"。所谓"位域"是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字

2017-08-19 21:35:42 214

原创 C 存储类

auto 存储类auto 存储类是所有局部变量默认的存储类。{ int mount; auto int month;}上面的实例定义了两个带有相同存储类的变量,auto 只能用在函数内,即 auto 只能修饰局部变量register 存储类register 存储类用于定义存储在寄存器中而不是 RAM 中的局部变量。这意味着变量

2017-08-19 20:45:25 292

原创 Netfilter 和 iptables关系

Netfilter所需要的规则是存放的内存中iptables 对内存中的规则执行添加,删除,及修改等操作。

2017-08-19 20:21:19 334

原创 Netfileter机制--规则的匹配方式

规则匹配的方式都是“first match”,即所谓的“优先”匹配。比如:INPUT为例,当我们在防火墙上添加新规则时,这些规则是按照“先后顺序”一条一条被加入到INPUT链。因此,第一条被加进来的规则,就会是存放在INPUT链内的第一条规则,即rule 1,最后被加进来的规则,当然就是INPUT链中的最后一条规则。当一个数据包进入INPUT链之后,filter机制就会根据该数据包

2017-08-19 20:09:21 750

指令集合讲解 平时积累的Linux指令

该文档是平时学习过程中,积累的指令,分享给大家,希望对大家有帮助

2017-12-30

修改网卡名称 centos

介绍了如何在centos环境下修改网卡的名称

2017-08-26

空空如也

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

TA关注的人

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