Linux c
u012567219
这个作者很懒,什么都没留下…
展开
-
c语言strtok函数用法
linux c 函数文档描述如下: 表头文件: #include函数定义: char *strtok(char *s, cont char *delim);函数说明: strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串,当strtok()在参数s的字符串中发现到参数delim的分割字符时则会将该字符改为\0 字符。在第一次调原创 2013-10-25 13:37:25 · 1242 阅读 · 0 评论 -
c语言变量存储方式
c语言变量存储方式动态存储方式(使用时动态分配存储空间,使用结束后释放)1.auto变量:c语言规定,函数内未加说明的变量视为自动变量,可以省去说明符auto。auto变量特点:作用域仅限模块内,该模块结束释放存储单元;不赋初值,其值不确定2.register类型变量静态存储方式(编译时分配存储空间知道程序运行结束)1.static类型变量:静态局部变量:函数内原创 2013-11-11 23:28:06 · 1385 阅读 · 0 评论 -
c语言指针
#include #include #includevoid test(char **p);void main(){ char *str = NULL; test(&str); printf("%s\n", str); free(str); str = NULL;}void test(char **p){ *p = (char *)malloc(100);原创 2013-11-01 21:23:06 · 448 阅读 · 0 评论 -
字符指针和字符数组
一直对指针理解不深,慢慢摸索中今天写了了例子,望高手指导下#include #include #include char *f1(); void main() { char *p = NULL; p = f1(); printf("%s\n", p); } char *f1(){ char p[] =原创 2013-11-12 21:31:12 · 438 阅读 · 0 评论 -
Linux写时拷贝技术(copy-on-write)
COW技术初窥: 在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。 那么子进程的物理空间没有代码,怎么去取指令执行exec系统调用呢? 在fork之后exec之转载 2014-02-17 13:58:57 · 499 阅读 · 0 评论 -
C语言typedef函数体验
c语言好多语法,看了不用就忘,忘了不看就废。今天写写对函数的别名例子,记录一下,以防忘记原创 2014-02-28 21:56:38 · 539 阅读 · 0 评论 -
c语言实现面向对象编程
介简: Redy的开发语言是C,但在源码中,有很多地方都使用到了面向对象编程的方法,例如:在基本数据类型这一个模块,所有的数据类型都继承robject;在抽象语法树模块,所有的节点都继承astobjct。在linux内核中,也有很多是使用的面向对象方法,在虚拟文件系统,驱动模型中都可以看到。c语言是一种结构化编程语言,以模块工能和处理过程设计为主,实现数据与代码分隔化。面向对象转载 2014-02-28 17:42:36 · 642 阅读 · 0 评论 -
typedef const int * const * SIZE
今天在一个库头文件中看到类似于“typedef const int * const * SIZE”的这种写法,看了半天才明白。typedef const int * const * SIZE 是把SIZE定义为常量指针,即const * SIZE等价于const int *原创 2014-03-01 00:00:34 · 734 阅读 · 0 评论 -
C语言库——静态库、共享库
我们在编写一个C语言程序的时候,经常会遇到好多重复或常用的部分,如果每次都重新编写固然是可以的,不过那样会大大降低工作效率,并且影响代码的可读性,更不利于后期的代码维护。我们可以把他们制作成相应的功能函数,使用时直接调用就会很方便,还可以进行后期的功能升级。 例如我要在一段代码中多次交换两个变量的值,我可以在代码中多次写入i=x;x=y;y=i; 不过这样未转载 2014-04-22 18:53:48 · 1500 阅读 · 0 评论 -
sbrk/brk函数用法
sbrk/brk函数重新指定数据段的结束位置sbrk()原创 2014-11-02 17:23:56 · 1516 阅读 · 0 评论 -
vsnprintf函数用法
vsnprintf函数头文件:#include 函数原型:int vsnprintf(char *str, size_tsize, const char *format, va_listap);函数说明:将可变参数格式化输出到一个字符数组参数:str输出到的数组,size指定大小,防止越界,format格式化参数,ap可变参数列表函数用法#include原创 2013-11-10 15:48:39 · 20405 阅读 · 0 评论 -
联合union
联合union1.union成员共享同一块内存。看下面例子#include union { char a; int b; } f;void main(){ f.a = 'a'; f.b = 0; printf("%d\n", f.a); printf("%d\n", f.b);}两次打印结果都为0,这就说明同一是个只有一个成员值存在2.unio原创 2013-11-08 20:45:48 · 754 阅读 · 0 评论 -
c语言程序内存分类
栈(stack):编译器自动分配释放,存放函数的参数值,局部变量,返回地址等,操作类似与数据结构中的栈。堆(heap):一般由程序员动态分配(malloc函数)和释放(free),如不手动释放,程序结束可能有操作系统回收。数据段(data):存放全局变量,静态变量,常数。代码段(code):存放程序代码。int a = 0; //datachar *p; //BSS数原创 2013-10-26 00:09:35 · 649 阅读 · 0 评论 -
sizeof函数和strlen函数
sizeof()只能用作数组,返回数组的大小。而strlen()返回遇到'\0'的长度 #include #include main(){ char s[5] = {'a', '\0', 'c'}; printf("%d\n",sizeof(s)); printf("%d\n",strlen(s));}结果51原创 2013-11-01 21:37:31 · 517 阅读 · 0 评论 -
Linux c字符串拷贝函数
#include #include void main(){char a[30] = "string (a)";char b[30] = "string\0string";int i;strcpy(a,b);for(i = 0; i {printf("%c", a[i]);}printf("\n");printf("%s\n", a)原创 2013-11-01 20:45:32 · 4836 阅读 · 0 评论 -
mmap 和 munap函数
1.mmap(建立内存映射)表头文件#include #include 定义函数:void *mmap(void *start,size_t length,int prot,int flags,int fd,off_t offsize);mmap()用来将某个文件内容映射到内存中,对该内存区域的存取即是直接对该文件内容的读写。start指向欲对应的内存起始地址,通常设为NULL原创 2013-11-02 21:59:30 · 784 阅读 · 0 评论 -
野指针
造成野指针可能的原因可能有:1.没有初始化指针变量定义时没有默认被初始化为NULL,是随机的,所以指针变量中初始化时要么设置成NULL,要么指定确定的地址。char *p = NULLchar *p = (char *)malloc(10);2.被free或者delete后面有设置成NULLchar *p = malloc(10);strcpy(p, "abc");原创 2013-11-03 20:06:59 · 443 阅读 · 0 评论 -
动态内存分配函数malloc,calloc,realloc
#include malloc,calloc,realloc函数相同之处:1.这几个函数都在stdilb.h头文件中。2.分配的内存不用时用free释放,当然free也可以传NULL,不会有任何影响。3.都是动态分配4.分配成功,返回所指向的指针,失败返回NULL具体细节的不同:void * malloc(size_t size) 动态分配指定大小连续内存单元vo原创 2013-11-04 21:56:51 · 681 阅读 · 0 评论 -
预处理
一个c程序被编译有多个阶段,其中第一个阶段为预处理。作用就是删除注释,插入#include包含的文件内容,替换宏定义,判断条件编译等在预处理有下面几个总结:1.#define定义中,多行字符串连接。如:#define FOR_EACH for(; ;) \ { \,,,,,,}2.#d原创 2013-11-05 23:53:31 · 634 阅读 · 0 评论 -
利用LD_PRELOAD进行hook
loader在进行动态链接的时候,会将有相同符号名的符号覆盖成LD_PRELOAD指定的so文件中的符号。换句话说,可以用我们自己的so库中的函数替换原来库里有的函数,从而达到hook的目的。这和Windows下通过修改import table来hook API很类似。相比较之下,LD_PRELOAD更方便了,都不用自己写代码了,系统的loader会帮我们搞定。但是LD_PRELOAD有个限制:只转载 2015-02-16 22:04:34 · 917 阅读 · 0 评论