文章分类 -  C

摘要:看内核时总遇到if(likely( )){}或是if(unlikely( ))这样的语句,最初不解其意,现在有所了解,所以也想介绍一下。likely() 与 unlikely()是内核(我看的是2.6.22.6版本,2.6的版本应该都有)中定义的两个宏。位于/include/linux/compil 阅读全文
posted @ 2015-09-17 10:32 牧 天 阅读(482) 评论(0) 推荐(0)
摘要:1.动态调用 //my.h void test(); //my.c#include<stdio.h> void test() { printf("This is a test\n"); } //main.c#include "my.h" int main(int argc, char* argv[] 阅读全文
posted @ 2015-07-29 11:17 牧 天 阅读(462) 评论(0) 推荐(0)
摘要:poll,Linux中的字符设备驱动中有一个函数,Linux 2.5.44版本后被epoll取代。poll()函数:这个函数是某些Unix系统提供的用于执行与select()函数同等功能的函数,下面是这个函数的声明:#include <poll.h>int poll(struct pollfd fd 阅读全文
posted @ 2015-05-08 15:07 牧 天 阅读(2198) 评论(0) 推荐(1)
摘要:#include<stdio.h> #include<pthread.h> void base() { //pritnf needs #include<stdio.h> printf("main\n"); // pthread_t: unsigned long int pthread_t threa 阅读全文
posted @ 2015-05-08 13:25 牧 天 阅读(133) 评论(0) 推荐(0)
摘要:SIGHUP 终止进程 终端线路挂断SIGINT 终止进程 中断进程SIGQUIT 建立CORE文件终止进程,并且生成core文件SIGILL 建立CORE文件 非法指令SIGTRAP 建立CORE文件 跟踪自陷SIGBUS 建立CORE文件 总线错误SIGSEGV 建立CORE文件 段非法错误SI 阅读全文
posted @ 2015-05-03 09:57 牧 天 阅读(377) 评论(0) 推荐(0)
摘要:sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作)。 他是POSIX的信号接口,而signal()是标准C的信号接口(如果程序必须在非POSIX系统上运行,那么就应该使用这个接口) 给信号signum设置新的信号处理函数act, 同时保留该信号原有的信号处理函数ol 阅读全文
posted @ 2015-05-03 09:50 牧 天 阅读(4071) 评论(0) 推荐(0)
摘要:什么是信号量为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域。临界区域是指执行数据更新的代码需要独占式地执行。信号量就可以提供这样的一种访问机制,让一个临界区同一时间只有一个线程在访问它,也 阅读全文
posted @ 2015-04-30 17:04 牧 天 阅读(368) 评论(0) 推荐(0)
摘要:union跟结构体类似,但是union是所有成员占据同一段内存地址。 1、union中可以定义多个成员,union的大小由最大的成员的大小决定。2、union成员共享同一块大小的内存,一次只能使用其中的一个成员。3、对某一个成员赋值,会覆盖其他成员的值(也不奇怪,因为他们共享一块内存。 但前提是成员 阅读全文
posted @ 2015-04-30 16:22 牧 天 阅读(1084) 评论(0) 推荐(0)
摘要:warning: incompatible implicit declaration of built-in function ‘exit’ [enabled by default] 其原因是缺少一个头文件stdlib.h。添加#include <stdlib.h>即可。 ------------- 阅读全文
posted @ 2015-04-30 10:41 牧 天 阅读(112) 评论(0) 推荐(0)
摘要:socketpair创建全双工管道直接的办法当然是pipe两次,创建两组管道,但是有没有更简单的呢?socketpair就可以了,man socketpair:socketpair - create a pair of connected sockets, The two socketsareind... 阅读全文
posted @ 2015-04-30 10:27 牧 天 阅读(448) 评论(0) 推荐(0)
摘要:GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。$gcc -g -o sample.o sample.c使用 -o 参数指定了编译生成的可执行文件名为 gdb-sample,使用参数 -g 表示将源代码信息编译到可执行文件中。如果不使用参数 阅读全文
posted @ 2015-04-29 21:52 牧 天 阅读(855) 评论(0) 推荐(0)
摘要:http://androidxref.com/6.0.0_r1/xref/system/core/include/cutils/list.h struct listnode { struct listnode *next; struct listnode *prev; }; static inlin 阅读全文
posted @ 2015-04-24 13:02 牧 天 阅读(345) 评论(2) 推荐(0)
摘要://这两货是进程中的全局变量,一个是当前进程锁,锁的对象是gProcess,即当前进程状态。另一个是当前进程的状态. Mutex gProcessMutex; //状态锁sp<ProcessState> gProcess; //状态 static bool gHaveTLS = false;stat 阅读全文
posted @ 2015-04-18 17:35 牧 天 阅读(445) 评论(0) 推荐(0)
摘要:Thread Specific Data 线程存储在多线程程序中,所有线程共享程序中的变量。现在有一全局变量,所有线程都可以使用它,改变它的值。而如果每个线程希望能单独拥有它,那么就需要使用线程存储了。表面上看起来这是一个全局变量,所有线程都可以使用它,而它的值在每一个线程中又是单独存储的。这就是线 阅读全文
posted @ 2015-04-18 16:12 牧 天 阅读(206) 评论(0) 推荐(0)
摘要:线程:线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。线程程序作为一种多任务、并发的工作方式,当然有其存在优势:使多CPU系统更加有效:操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上 线程创建 阅读全文
posted @ 2015-04-18 15:53 牧 天 阅读(263) 评论(0) 推荐(0)
摘要:它们都是动态分配内存,先看看它们的原型:void *malloc( size_t size ); //分配的大小void *calloc( size_t numElements, size_t sizeOfElement ); // 分配元素的个数和每个元素的大小共同点就是:它们返回的是 void 阅读全文
posted @ 2015-04-18 12:45 牧 天 阅读(205) 评论(0) 推荐(0)
摘要:mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。mmap在用户空间映射调用系统中作用很大。 #include<sys/mman.h> void* mmap(void* start,size_t length,int 阅读全文
posted @ 2015-04-18 11:30 牧 天 阅读(1355) 评论(0) 推荐(0)
摘要:一直都对内存映射文件这个概念很模糊,不知道它和虚拟内存有什么区别,而且映射这个词也很让人迷茫,今天终于搞清楚了。。。下面,我先解释一下我对映射这个词的理解,再区分一下几个容易混淆的概念,之后,什么是内存映射就很明朗了。 原理 首先,“映射”这个词,就和数学课上说的“一一映射”是一个意思,就是建立一种 阅读全文
posted @ 2015-04-18 11:17 牧 天 阅读(749) 评论(0) 推荐(0)
摘要:1、c语言中全局变量和static变量的初始化需要指定一个常量,不能是一个非常量的表达式;而在c++中是可以的2、在操作c和c++全局变量时,只能对其采用初始化的方式,而不能采用赋值的方式,即可以int a = 10;而不可以:int a;a = 10;----------------------- 阅读全文
posted @ 2015-04-15 10:13 牧 天 阅读(144) 评论(0) 推荐(0)
摘要:extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编 译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载 阅读全文
posted @ 2015-04-15 09:58 牧 天 阅读(277) 评论(0) 推荐(0)