linux C编程
文章平均质量分 88
RopenYuan
这个作者很懒,什么都没留下…
展开
-
消息队列的建立过程
消息队列提供了一种由一个进程向另一个进程发送块数据的方法。另外,每一个数据块被看作有一个类型,而接收进程可以独立接收具有不同类型的数据块。消息队列的好处在于我们几乎可以完全避免同步问题,并且可以通过发送消息屏蔽有名管道的问题。更好的是,我们可以使用某些紧急方式发送消息。坏处在于,与管道类似,在每一个数据块上有一个最大尺寸限制,同时在系统中所有消息队列上的块尺寸上也有一个最大尺寸限制。消息队列的建立过程分为四步:1. 获得获得项目相关的IPC键值,建立一个相对惟一的key值; 通过函原创 2010-09-23 21:01:00 · 7344 阅读 · 1 评论 -
list_entry()宏
list_entry()宏#define list_entry(ptr, type, member) \ ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) ptr是指向list_head类型链表的指针,type为一个结构,而member为结构type中的一个域,类型为list_head,转载 2012-04-25 17:10:57 · 585 阅读 · 0 评论 -
关键字Const与Volatile的使用
关键字const有什么含意? 我只要一听到被面试者说:“const意味着常数”,我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:Embedded Systems Programming)的每一位读者应该非常熟悉const能做什么和不能做什么.如果你从没有读到那篇文章,只要能说出const意味着“只读”就可以了。尽管这个答案转载 2012-08-30 17:48:17 · 792 阅读 · 0 评论 -
函数应用
#includevoid FileFunc(){ printf("FileFunc\n");}void EditFunc(){ printf("EditFunc\n");}typedef struct { void (*funcp)();}FUNCP;void main(){ FUNC原创 2013-06-06 14:43:23 · 673 阅读 · 0 评论 -
基于ALSA的WAV播放和录音程序
在看ALSA Lib时,写了一个比较典型的基于ALSA的播放录音程序。程序包包含四个部分:WAV Parser、SND Common、Playback和Record。WAV Parser是对WAV文件的分析和封装,这里只针对Standard WAV File;SND Common是Playback 和Record共同操作,如SetParams、ReadPCM和WriteTAG: 录音 A转载 2013-07-16 16:25:10 · 7793 阅读 · 0 评论 -
C语言宏定义##连接符和#符的使用
C语言中如何使用宏C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念)。下面对常遇到的宏的使用问题做了简单总结。关于#和##在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量 通过替换后在其左右各加上一个双引号。比如下面代码中的宏:#define WARN_IF(EXP)转载 2013-11-12 17:14:08 · 716 阅读 · 0 评论 -
atoi函数的实现(十进制 十六进制的实现)
#includeint atoi(char * str){ int value = 0; int sign = 1; int radix; if(*str == '-') { sign = -1; str++;原创 2014-03-14 15:12:03 · 13302 阅读 · 0 评论 -
C语言函数指针
一、函数指针的定义顾名思义,函数指针就是函数的指针。它是一个指针,指向一个函数。看例子:A) char * (*fun1)(char * p1,char *p2);B) char **fun2(char * p1,char * p2);C) char *fun3(char * p1,char * p2);看看上面三个表达式分别是什么意思?C):这很容易,f转载 2014-03-27 16:57:15 · 635 阅读 · 0 评论 -
C语言函数指针
C语言函数指针一、函数指针的定义顾名思义,函数指针就是函数的指针。它是一个指针,指向一个函数。看例子:A) char * (*fun1)(char * p1,char *p2);B) char **fun2(char * p1,char * p2);C) char *fun3(char * p1,char * p2);看看上面三个表达式分别是什么意思?转载 2014-03-27 16:58:16 · 776 阅读 · 0 评论 -
mini2440开机自动运行自编qt程序
mini2440开机自动运行自编qt程序2010年07月10日 星期六 18:49如果想在开机后直接运行自己编的qt程序,而不想出现qt自带的那个界面只需把/etc/init.d/rcS中的/bin/qtopia & 注释掉#/bin/qtop转载 2011-09-29 16:43:31 · 3794 阅读 · 1 评论 -
在Linux中创建静态库和动态库
时间:2011年09月05日 10:30:31 来源:中国it实验室 作者:Yoyo 我们通常把一些公用函数制作成函数库,供其它程序使用。函数库分为静态库和动态库两种。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连转载 2011-09-27 15:37:31 · 721 阅读 · 0 评论 -
指针运算问题
#include #include struct num { long num1; char num2; short num3; long num4[5]; short num5[5];};int main(原创 2011-09-18 00:18:43 · 773 阅读 · 0 评论 -
epoll函数的建立过程及程序试验方法
epoll - I/O event notification facility在linux的网络编程中,很长的时间都在使用 select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在 linux/posix_types.h头文件有这样的声明:#define __FD_SETSIZE 1024表原创 2010-09-26 19:41:00 · 1422 阅读 · 0 评论 -
预处理命令-条件编译
定义#ifndef x #define x ... #endif这是宏定义的一种,它可以根据是否已经定义了一个变量来进行分支选择,一般用于调试等等.实际上确切的说这应该是预处理功能中三种(宏定义,文件包含和条件编译)中的一种----条件编译。 C语言在对程序进行编译时,会先根据预处理命令进行“预处理”。C语言编译系统包括预处理,编译和链接等部分。#ifndef x//先测试x是否被宏定义过#define x//如果没有宏定义下面就宏定义x并编译下面的语句...#endif//如果已经定义了则编译#e原创 2010-10-10 19:47:00 · 1359 阅读 · 0 评论 -
LINUX 信号量操作
http://www.360doc.com/content/09/1219/16/509553_11506380.shtml原创 2010-11-23 16:48:00 · 716 阅读 · 0 评论 -
c语言 #define 中的UL
c语言 #define 中的ULU和L是 整数文字量的后缀修饰,用于显示指明整数文字量的类型为unsigned int(U)和long int(L)。 类似的还有浮点数文字量的后缀修饰F或f,用于指明文字量表示的是一个float,而不是默认情况下的double。经常发现一些C语言中通过#define 定义的数据中包含有UL符号,不理解为什么,把他去掉发现也没有什么区别。现在才明白UL是标记该宏长整型 十进制 数据,而不是字符,也不是int型数据。C语言中默认宏中的数字是整型数据。如下面的例子:#defi原创 2011-01-21 19:47:00 · 28116 阅读 · 0 评论 -
Break语句与continue语句的区别
Break语句与continue语句的区别while循环、do-while循环和for循环中,可以用break语句跳出循环,用continue语句结束本次循环,而对用goto语句和if语句构成的循环,不能用break语句和continue语句进行控制。一、 break语句(1) break语句的作用A、在分支结构程序设计中用break语句可以使流程跳出switch结构,继续执行switch语句下面的一个语句。B、break语句还可以用来从循环体内中途跳出循环体,即提前结束循环,接着执行循环下面的语句。如:w原创 2011-01-22 08:24:00 · 8814 阅读 · 0 评论 -
位运算符的应用的总结
1、&运算符的应用; A. 清零某些位(与0相&);B. 保留某些位(与1相&) ;2. |运算符的应用: 置位某些位;3. ^运算符的应用: A. 特定位翻转(与1相^);B.保留特定位(与0相^);C. 交换两个值,不用临时变量; 4. ~运算符的应用: 为了保证可移植性:可用以下方法: a = a&~1;5. 从一个数中第m位开始取其右面n位程式为: c = a>>(m-n+1) & ~(~0原创 2011-01-31 00:03:00 · 1067 阅读 · 0 评论 -
用变量a给出下面的定义
a) 一个整型数(An integer) b) 一个指向整型数的指针(A pointer to an integer) c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)d) 一个有原创 2011-08-11 10:41:06 · 9146 阅读 · 0 评论 -
/*测试数组的类型及指针类型所占的字节长度*/
/*测试数组的类型及指针类型所占的字节长度*//******************************************************* *功能:测试各种数组(整形数组、实型数组及字符 * 型数组)及指向的不同数组的指针变量的字节长度原创 2010-09-05 15:48:00 · 3717 阅读 · 0 评论 -
数组简略初始化过程
#include #include #define SNDRV_CARDS 8static int enable[SNDRV_CARDS] = {1, [1 ... (SNDRV_CARDS - 1)] = 5};int main(void){ int i,a; for(i = 0; i原创 2014-07-30 19:30:48 · 708 阅读 · 0 评论