编程语言 c
勇zhe无wei
这个作者很懒,什么都没留下…
展开
-
sqlite实践
以下sqlite是对 该blog 内容的实践过程内容: - 创建数据库 - 创建表 - 在表中插入字段 - 增加 - 查找 - 更新 - 删除(ccdk-1.5.2alpha)[root@Router-B sqlite]# sqlite3 foo.dbSQLite version 3.14.2 2016-09-12 18:50:49Enter ".help" for usage转载 2017-01-17 15:59:09 · 404 阅读 · 0 评论 -
设计模式--构造者模式
构造者模式源码 from: 万方数据 朱进 paper 构造者模式使用场景:当生产的产品有复杂的内部构造需要生产的产品的属性相互依赖,这些属性的赋值顺序比较重要。#include <stdio.h>#define BUIDE_C#define FINISHED 1#define UNFINISHED 0typedef struct Splane plane;typedef s原创 2015-03-03 10:44:07 · 682 阅读 · 0 评论 -
abort信号捕捉
#include#include#include#includevoid handler(int i ){ printf("catch signal\n");}int main(){ signal(SIGABRT,handler); abort(); while(1);/*not be acted*/ return 0;}原创 2015-03-02 14:53:59 · 1059 阅读 · 0 评论 -
C/C 动/静 态库
c语言由文本到二进制的过程 :编译 -> 汇编 -> 链接 动态库是程序链接的时候被链接,使用动态库的好处: -如果多个程序使用同一个动态库,如果动态库出现bug,不需要升级所用该动态库的程序,只要升级该动态库。 -该动态库只有这一个,没有其他副本,节省内存空间静态库是编译的时候被载入,使用静态库的好处: -使用静态库编译好的 程序在任何机器上都可以直接运行。 -如果有多个原创 2015-02-09 13:15:16 · 947 阅读 · 0 评论 -
dlopen,dlsym,dlclose的使用
dlopen dlsym dlclose的应用在写程序时,我们经常使用动态库,其实,上面提供的三个函数也可以调用动态库。- 创建动态库#include void test(){ printf("test hello!\n");}command : # gcc -shared -o test.so test.c -fPIC-callback#原创 2015-02-05 13:53:41 · 918 阅读 · 0 评论 -
localtime和localtime_r
在工作中 突然用到时间函数,一查才发现localtime和localtime_r原来差别这么大。1. loacltime 不可重入,localtime_r可重入。2. localtime使用两次,前面的值会被重写。 #include #include int main(int argc,char *argv){ char snow[50]={0},send[50]={0}原创 2015-02-05 09:36:56 · 1809 阅读 · 0 评论 -
指针数组
(*p)[10] : 指针数组,指向数组的指针,每个数组中有10个元素。int main(int argc, char *argv[]){ char a[5][10] = {"123","234","345","456","678"}; char (*p)[10]; int i = 0; p = a; for(i=0; i<5; i++)原创 2015-02-04 16:24:16 · 534 阅读 · 0 评论 -
CentOS6.5 gcc-4.8.2安装步骤
转载自:http://blog.sina.com.cn/s/blog_627b3f930101hnz8.html非常感谢Trig_YaoCentOS6.5自带的gcc版本为4.4.7,有些年代了,一些新软件要用到的库没有,最新的gcc 4.8.2已经放出来了,于是下载源代码安装了一个试试。1.首先把旧的gcc相关的编译工具安装好[javasc转载 2015-01-30 13:17:31 · 2518 阅读 · 0 评论 -
注册终止函数
当程序结束后,注册的函数还可以执行。#include #include void aa1(void){ printf("aa1\n"); return;}void aa2(void){ printf("aa2\n"); return;}int main(int argc, char *argv[]){ atexit(aa1);原创 2014-12-18 17:33:48 · 899 阅读 · 0 评论 -
fork 和 vfork 问题
vfork and fork两个函数都是用于创建子进程。区别: 1. vfork 在子进程调用exec之前,它在父进程的空间中进行。 2. vfork 保证子进程先运行,在调用exec之后父进程才开始运行。#include #include int main(int argc, char *argv[]){ int pid,varble =原创 2014-12-17 15:03:32 · 754 阅读 · 0 评论 -
flex自动生成工具用法
该文章和源码 from : http://blog.csdn.net/hczhiyue/article/details/20483209edit : 1 /*name : lizi.flex*/ 2 %option noyywrap 3 %{ 4 int num_lines = 0, num_chars = 0; 5 %} 6 %% 7原创 2014-11-21 10:37:09 · 2097 阅读 · 0 评论 -
tcp checksum计算
checksum/* This is a reference internet checksum implimentation, not very fast */inline u_short in_cksum(u_short *addr, int len){ register int nleft = len; register u_short *w = addr;原创 2015-03-02 15:19:27 · 2090 阅读 · 0 评论 -
计算机编码
来自: 阮一峰 http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html一下对自己有用的精简部分:1. ASCII码在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表原创 2015-03-02 16:58:09 · 657 阅读 · 0 评论 -
测量程序性能的方法
测量程序性能的方法程序性能的测量主要有两种方法:循环计数,统计时间法cycle统计法循环计数,时间统计法 int i = 0; struct timeval start, end; int loop = 100000; gettimeofday(&start, NULL); for (i = 0; i < loop; i++) { t原创 2017-01-16 16:55:09 · 486 阅读 · 0 评论 -
文件结尾的判断
经过今天的验证,终于知道linux文件的换行符为LF,ascii Hex为0A,Dec为10, 在进行条件判断可以使用 if(ch == ‘\n’)的写法.实验代码#include <stdio.h>#include <stdlib.h>long sizeByFile(const char *filename,char *mode){ long size=0; FILE *f原创 2015-10-12 16:29:13 · 1130 阅读 · 0 评论 -
文件中关键字后面是什么及长度
/***writed by zhangxxxwwemail:zhangxxxww@163.com***/char *strstr(const char *haystack, const char *needle);/*返回在haystack中第一次出现needle的位置*//* para: buffer:要查找缓冲区的首地址 str:要查找的原创 2015-08-25 13:08:32 · 933 阅读 · 0 评论 -
函数实现文件大小
/***writed by zhangxxxwwemail:zhangxxxww@163.com***/long sizeByFile(const char *filename,char *mode){ long size=0; FILE *fp = NULL; fp = fopen(filename,mode); if(NULL == fp) {原创 2015-08-11 13:56:02 · 532 阅读 · 0 评论 -
更改文件中的内容
/* program使命:查找文件中字符串,并用其他字符串代替 思想: 找到字符串,然后将文件指针移动到要替换的字符串的首部,然后写入要使用的字符串,然后在文件buffer中把后面的片段写到文件中。*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>long sizeByF原创 2015-08-25 13:13:26 · 861 阅读 · 0 评论 -
安装gcc-4.8.2时遇到的问题及解决方案
configure: error: cannot compute suffix of object files: cannot compile问题产生原因: 检查环境配置时,找不到对应的so 解决方法:添加环境变量 #vim /etc/profile export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/xiaowei/gcc/mpc-原创 2015-07-17 11:39:07 · 3011 阅读 · 0 评论 -
intel指令优化
程序优化预读指令读内存提前预取内存中数据到CACHE内,提高CACHE的命中率,加速内存读取速度,这是设计预读指令的主要目的。 prefetch0、prefetch1、prefetch2、 prefetchnta。 预取指令只是给CPU一个提示,所以它可被CPU忽略,而且就算预取一段错误的地址也不会导致CPU异常。一般使用prefetchnta预取指令,因为它不会污染CACHE,它把每次取得的数原创 2015-04-29 14:59:24 · 4015 阅读 · 0 评论 -
获取键盘按键值
很久以前的代码拿出来了!熟悉linux键盘驱动的这段代码太容易啦!/*获取键盘的按值*/#include #include #include #include #include struct info{ struct timeval time; unsigned short type; unsigned short code; unsigned int value原创 2015-03-04 16:42:15 · 3624 阅读 · 1 评论 -
linux零元素数组应用
/*在结构体中最后零元素数组的妙用*/#include typedef struct aa{ int a; double b[0];};int main(){ struct aa bb; int c=9; printf("%x\n",&(bb.a)); printf("%x\n",&c);原创 2015-03-04 17:10:31 · 987 阅读 · 0 评论 -
GSM压缩/ 解压实现
#include int gsmEnode7bit(unsigned char* pDst,const char* pSrc){ int nSrc; // 源字符串的计数值 int nDst; // 目的字符串的计数值 int nChar; // 当前正在处理的组内字符的字节序号 unsigned char nLeft; //上一字节残留的数据 int nSrc_leng原创 2015-03-04 16:38:20 · 1276 阅读 · 0 评论 -
high performance program (SSE4.2 intrin instruction)
In file included from mm_lddqu.si128.c:2:0:/usr/local/lib/gcc/x86_64-redhat-linux/4.7.1/include/nmmintrin.h:31:3: error: #error "SSE4.2 instruction set not enabled"这个问题产生的原因:没有加 Support for SS原创 2014-11-20 16:27:03 · 2511 阅读 · 0 评论 -
质因数的求法
质因数分解/* 求质因数 */#include#includeint main(){ int n,a=2; printf("please input n:"); scanf("%d",&n); if(n<=1) { printf("input error!\n"); return -1; } while(a*a < n) { while(n%a==0)原创 2014-05-23 07:20:54 · 2241 阅读 · 2 评论 -
return 和 exit 的区别
return 和 exit 的区别exit() 表示结束当前进程或当前程序,在整个程序中,只要有 exit,就退出,并将应用程序的一个状态返回给OS。一般 和操作系统相关的是0为正常退出,非0为非正常退出。return: 表示调用堆栈的返回。例如当程序进入函数调用时,当函数原创 2014-05-19 22:53:42 · 1058 阅读 · 0 评论 -
重定位文件指针fseek
用法:int fseek( FILE *stram, long offset ,int position);描述:该函数用来设置文件指针stream的位置。如果执行成功,stream 将以position 为基准,偏移offset 个字节的位置。如果执行失败,则不改变指针的位置。position 用来设置从文件的哪个位置开始偏移,SEEK_SET 从文件开头位原创 2013-12-30 10:01:06 · 3111 阅读 · 0 评论 -
c语言中连接两个字符串
#includemain(){void con(char string1[],char string2[],char string[] );char s1[100],s2[100],s3[100];printf("\nintput string1 :");scanf("%s",s1);printf("\ninput string2 :");scanf("%s",s2);printf("\ninpu原创 2012-10-21 11:48:41 · 3487 阅读 · 0 评论 -
位运算
学习单片机中,在编程中经常遇到位运算,各个寄存器的初始化与赋值也会涉及位运算。经常见到的位运算符: &(按位与),常用语储存器单元清零操作和保留指定为操作。 |(按位或),常用于使某个数据位置1操作。 ^(按位异或),异或的规则是 1和此位相异或,此为改变 0和此位相原创 2013-03-17 14:37:37 · 1136 阅读 · 0 评论 -
c语言结构体数组指针
#include#define N 3struct student{ long int num; char name[20]; float score[3]; float aver;};int main(){ void Input(struct student stu[]); struct student max(struct student stu[]原创 2013-03-16 23:10:45 · 10519 阅读 · 0 评论 -
位运算数的运算
将十进制数转化为16进制和2进制#includevoid exchan(int b);int main(){int a;printf("input a=");scanf("%d",&a);printf("%d的十六进制数为%x",a,a);//printf("%d的十六进制数为%x\n"a,a);printf("%d的二进制形式输出\n",a);exchan(a);ret原创 2013-03-17 15:28:05 · 1428 阅读 · 1 评论 -
c语言system的用法
尽管大家都知道system(“PAUSE”)可以让C程序在运行结束之前暂停运行。用system(“PAUSE”)可以解决运行程序一闪而过,看不到输出结果的问题。有程序员会用system(“PAUSE”)只是为了能够让程序暂停,以便看到运行的结果。那么system(“PAUSE”)语句究竟怎么运行呢?下面是关于system(“PAUSE”)的一些观点: 1.平台相关性。system(原创 2012-12-17 19:34:39 · 7155 阅读 · 1 评论 -
c语言链表问题,希望高手指点
# include # include # include # define LEN sizeof (LNode) //定义LEN为一个字节长度 enum BOOL {False,True}; typedef struct LNode { char data; //数据域 struct node *next; //指向下一个节点的指针 } LNode, *LinkList; void GreatL原创 2012-10-25 23:04:49 · 1027 阅读 · 0 评论 -
c语言结构体指针运行出现错误
#include #include#define N 10int main(){int i;char s[10][20],*p[10];int sort(char *q,int n);printf("INput %d string :\n",N);for(i=0;i<N;i++){p[i]=s[i];gets(p[i]);}printf("\n");for(i=0;i<N;i++)printf("原创 2012-11-04 15:25:27 · 968 阅读 · 0 评论 -
c语言链表,请高手指点
# include # include # include # define LEN sizeof (LNode) //定义LEN为一个字节长度 enum BOOL {False,True}; typedef struct LNode { char data; //数据域 struct node *n原创 2012-10-25 23:06:27 · 699 阅读 · 0 评论 -
c语言指针运行出现问题
#include #include#define N 10int main(){ int i; char s[10][20],*p[10]; int sort(char *q,int n); printf("INput %d string :\n",N); for(i=0;i<N;i++) { p[i]=s[i]; gets(p[i]); } printf("\n"原创 2012-11-04 15:27:13 · 721 阅读 · 0 评论 -
assert用法
assert 定义:#includevoid assert( int expression);assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。频繁的调用会极大的影响程序的性能,增加额外的开销。通常在 #include 之前原创 2013-12-22 23:24:23 · 4257 阅读 · 0 评论 -
c 陷阱与缺陷(一)
1.程序在设计时,往往得出正确的结果,但是它并不是程序员自己想要的。 例如: printf("hello world!") 编译器进行编译时不会出现任何问题,但是结果: 提示竟然出现在!的后面。因此 \ n 的使用变的尤为重要。2. = 和 ==while( c = ' ' ||原创 2014-01-07 10:23:04 · 923 阅读 · 0 评论 -
最大公约数和最小公倍数(迭代法)
#include#include#define SWAP(a,c,b) (c=a,a=b,b=c)int gcd(int a,int b){ int r; while(b!=0) { r=a%b; a=b; b=r; } return a;}int main(){ int a=0,b=0,c=0; printf("please input interger:原创 2014-04-27 09:21:49 · 1106 阅读 · 0 评论 -
c语言中指针悬空
指针悬空指针悬空在我们使用指针的时候很容易被忽视,主要的表现是:指针所指向的内存释放,指针并没有置为NULL,致使一个不可控制的指针。#include#includeint *pointer;void func(){ int n=8; pointer=&n; printf("pointer point data is %d\n",原创 2014-05-18 23:18:30 · 2681 阅读 · 0 评论