技术宅,fat-man

增加语言的了解程度可以避免写出愚蠢的代码

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

随笔分类 -  C Language

上一页 1 2 3

Macbook Air上编译APUE源码
摘要:整体编译代码1 解压src.rar, 释放文件到当前用户的根目录下(/Users/lishujun/)2 进入/Users/lishujun/apue.2e3 修改Make.define.macos文件,在文件里指定源码所在目录WKDIR=/Users/lishujun/apue.2e4 进入/Users/lishujun/apue.2e/include目录,修改apue.h#if defined(SOLARIS) #define _XOPEN_SOURCE 500 /* Single UNIX Specification, Version 2 for Solaris 9 */ #d... 阅读全文

posted @ 2012-09-15 23:35 codestyle 阅读(505) 评论(0) 推荐(0) 编辑

O_APPEND:原子操作
摘要:当多个进程打开同一个文件写入日志的时候,OPEN时指定了O_APPEND参数,UNIX能保证这个操作是原子的,程序不需要自己加锁/*log1.c*/#include<stdio.h>#include<string.h>#include<fcntl.h>#include<unistd.h>int Max = 300;int main(){ int i; int fd; fd = open("1.log",O_WRONLY | O_APPEND); for(i=0;i<Max;i++) { char msg[100]; sp 阅读全文

posted @ 2012-06-28 00:44 codestyle 阅读(879) 评论(0) 推荐(0) 编辑

转:C语言中time_t数据类型详细介绍
摘要:原文:http://www.eefocus.com/xuefu2009/blog/10-03/187348_f456a.html包含文件:#ifndef__TIME_T#define__TIME_T /*避免重复定义time_t*/typedef long time_t; /*时间值time_t 为长整型的别名*/#endif既然time_t实际上是长整型,到未来的某一天,从一个时间点(一般是1970年1月1日0时0分0秒)到那时的秒数(即日历时间)超出了长整形所能表示的数的范围怎么办?对time_t数据类型的值来说,它所表示的时间不能晚于2038年1月18日19时14分07秒。为了能够表示更 阅读全文

posted @ 2012-06-14 13:37 codestyle 阅读(910) 评论(0) 推荐(0) 编辑

apue源码编译
摘要:http://www.apuebook.com/可以下载源码src.tar.gz修改配置文件编辑源码解压生成的apue.2e文件夹下的Make.defines.linux修改WKDIR=/home/var/apue.2e为你的apue.2e目录,比如我的apue源码解压在/usr/local,那我就改为:WKDIR=/usr/local/apue.2e然后进入apue.2e/std 目录,编辑linux.mk。修改里面所有的nawk为awk。最后返回apue.2e目录,执行make命令。解决编译错误getenv1.c:4: error: ‘ARG_MAX’ undeclared here (n 阅读全文

posted @ 2012-06-11 15:14 codestyle 阅读(582) 评论(0) 推荐(0) 编辑

【转】如何安装rabbitmq-c-aafba2c665b5这个版本的rabbitmq-c
摘要:http://hi.baidu.com/snowhilloldman/blog/item/a26830dd76b768205882dd30.html照理安装一个库这么简单的东东不应该写一篇垃圾文章,只是,我的真的很痛苦,希望看官们理解!先下载这个库吧:(点了以后文件名会自动变成rabbitmq-c-aafba2c665b5.tar.gz)http://hg.rabbitmq.com/rabbitmq-c/archive/tip.tar.gz这个库的最后更新时间是2010-04-20,姑且命名其版本为:rabbitmq-c-20100420再下载另一个库:(点了以后文件名会自动变成rabbitm 阅读全文

posted @ 2012-06-11 14:35 codestyle 阅读(283) 评论(0) 推荐(0) 编辑

能打印自己源码的C程序的版本2
摘要:版本2#include <stdio.h>;int main(){ FILE *f; char c; if ( ( f = fopen( __FILE__, "r" ) ) != NULL ) { while ( fread( &c, 1, 1, f ) == 1 ) fwrite( &c, 1, 1, stdout ); fclose( f ); } return 0;} 阅读全文

posted @ 2012-04-25 23:48 codestyle 阅读(167) 评论(0) 推荐(0) 编辑

能打印自己源码的C程序的版本1
摘要:版本1#include <stdio.h>int main(){char *p ="#include <stdio.h>%c int main(){char *p=%c%s%c; printf(p, 10, 34, p, 34);}";printf(p, 10, 34, p, 34);}评:这个实现非常精妙, 第一个p将当前字符串传递进去,作为printf的格式字符串,用后面的参数来替换格式字符串中的占位符(%c ,%c%s%c)生成一个新的字符串,第一个%c被替换为回车符(10的ASCII码值)%c%s%c则被替换为:"#include 阅读全文

posted @ 2012-04-25 22:30 codestyle 阅读(512) 评论(0) 推荐(0) 编辑

管道:pipe
摘要:int pipe1[2];int r = pipe(pipe1);assert(r==0);//创建管道成功write(pipe1[1],&buffer,strlen(buffer));read(pipe1[0],&buffer,BUF_SIZ);close(pipe1[1]);管道操作与关闭检测默认情况下对于管道的读写操作是阻塞的,如果管道里没有数据可读,则read调用会被阻塞住直到有数据写入,而另一端日如果关闭了fd[1],则read才可以返回,返回值为0表示写入端已经被关闭,返回-1则表示当前的fd本身被关闭void readpipe(){ int r; for(;;) 阅读全文

posted @ 2012-03-14 23:19 codestyle 阅读(957) 评论(0) 推荐(0) 编辑

C语言:io重定向
摘要:什么是IO重定向?C语言里调用fprintf的时候可以向指定的fp(FILE *fp)写入数据,但是调用printf函数时确不需要指定任何FILE*,为什么?启动一个C程序时,调用环境自动建立3个FILE*(stdin,stdout,stderr),并关联相应的设备,而我们的scanf使用的就是stdin,printf使用的是stdout,但是这种关联在程序启动的时候是可以改变的,这就是IO重定向每个标准输入输出描述符都有自己的缓存,向他们的缓存块里写入数据,程序就可以调用相应的函数读取,例如getchar()可以从stdin的缓存块里读取一个字符#include <stdio.h> 阅读全文

posted @ 2012-03-14 23:08 codestyle 阅读(857) 评论(0) 推荐(0) 编辑

C语言:fopen模式比较
摘要:fopen 模式属 性rwar+w+a+文件必须已存在YNNYNN文件内容将丢失NYNNYN允许从流读取(fread)YNNYYY允许写入到流(fwrite)NYYYYY从流的末尾写入NNYNNY任意定位(fseek)YYYYYN当操作的文件的文件是二进制文件的时候,流的模式可以指定符中添加字母b进行表示,b可以出现在+号的之前或之后 例如:rb,wb,a+b,ab+参考:《C语言参考手册》 p284,p285r+ ,w+,a+ 几种模式解析虽然r+,w+两种模式都是可以进行进行读写操作,但是w+打开文件的时候会清除掉文件内容,因此当需要对文件内容进行随机访问和读写的时候,坚决的不能使用这种模 阅读全文

posted @ 2012-03-14 22:59 codestyle 阅读(1288) 评论(0) 推荐(1) 编辑

C语言:传递可变参数
摘要:void g(...);void f(...){g(...);}f("%s %d","hello",2011);//需求:函数g,f都支持可变参数,外部调用函数f,函数f把自己的参数传递给g #define FUNC(format,...) g(format,__VA_ARGS__)//方案1:将f实现为一个宏(但是这种方法不够灵活)void g(char ** format,va_list *args){ va_start(*args, *format); }void f(char *format, ...){ va_list args; g(& 阅读全文

posted @ 2012-03-14 22:53 codestyle 阅读(1524) 评论(0) 推荐(0) 编辑

C语言:什么是可变参数?
摘要:printf其实就是使用了可变参数的函数,printf的原型定义为int printf(char *format,...);我们在使用printf的时候可以这样ptintf("hello");ptintf("%s ,today is % year","hello",2011);可变参数由调用函数动态的传递参数进被调函数(被调函数使用...声明自己支持可变参数),被调函数通过格式字符串来识别调用函数传递进来的参数个数和类型可变参数解析我们知道C程序函数调用的时候是遵循__stdcall,也就是调用者负责参数的压栈和清理,参数在栈上是按进 阅读全文

posted @ 2012-03-14 22:48 codestyle 阅读(443) 评论(0) 推荐(0) 编辑

FILE* 与 文件描述符之间的转换
摘要:UNIX系统有一个设计哲学:一切皆文件,最初对这句话没啥体会,不知道他说的是啥,直到看到fdopen(),fileno()才发现原来在UNIX下任何文件描述符都可以和FILE类型做互相的转换,这个例子是本来是一个socket文件描述符,也可以调用fdopen()转换成为以个FILE流,然后通过fread,fwrite进行网络通信,原来UNIX用文件流这个概念屏蔽了不同设备(网卡/硬盘/CD)的差异,抽象读一个可写可读的流.windows部分支持这个特征,但前提是转换的HANDLE(Windows的文件描述符)是文件指针,这样可以通过fdopen转换成为FILE*否则fdopen里用于检查HAN 阅读全文

posted @ 2012-03-14 22:39 codestyle 阅读(1138) 评论(0) 推荐(0) 编辑

C语言:格式字符串中的类型
摘要:基本格式字符含义详解模式字符数据类型进制计数法备注%cchar--%schar*--%d,%iint10-%uunsigned int10-%ounsigned int8-%x,%Xunsigned int16-x,X的区别是数据中A-F的大小写的区别%fdouble10浮点12.34%e,%Edouble10指数1.234000e+001%g,%Gdouble10指数 OR 浮点取其中较短的一种计数法%a,%Adouble16指数Linux/gcc有定义%pvoid*--(C99) 等价于%08X,%#8x扩展格式字符含义模式字符可匹配模式说明数据类型%l?d,I,u,o,x,X 长整形lo 阅读全文

posted @ 2012-03-14 22:31 codestyle 阅读(976) 评论(0) 推荐(0) 编辑

C语言:scanf的格式字符串
摘要:scanf的格式字符串远比printf简单:%[*][数据宽度]类型指定读取字节数(即数据宽度)char buffer[10];scanf("%9s",buffer);printf("%s\n",buffer);//最多读取9个字符(最后一个字节留着存储'\0')防止数组越界读取并扔掉若干字节scanf("%*6c");scanf("%c",&c);printf("%c\n",c);//输入"hello,world",跳过前6个字符,读取并打印w可以指 阅读全文

posted @ 2012-03-14 22:26 codestyle 阅读(770) 评论(0) 推荐(0) 编辑

C语言:printf的格式字符串
摘要:printf的格式字符串 : %[标记] [ [ * ] [数据宽度] ] [.精确度]类型+-0#最小宽度精确度类型显示符号左对齐(默认右对齐)数据前填0(右对齐时)8进制加016进制加0x10进制整数或者*号例如.2-Y--Y-c-Y--Y-sYYY-Y-d,i-YY-Y-u-YYYY-o-YYYY-xYYY-YYf,e,g,a-表示该类型不需要这个选项从上表看出只有数据宽度和对齐才是所有类型都支持的格式,指定宽度时默认右对齐只有在指定最小宽度时,我们才能使用-,0标志,这个时候的对齐和填充才有意义,实际上只要指定最小宽度,且数据不足这个宽度就一定会发生填充,以空白字符或者填充在数据前部或 阅读全文

posted @ 2012-03-14 22:25 codestyle 阅读(1102) 评论(0) 推荐(0) 编辑

上一页 1 2 3
点击右上角即可分享
微信分享提示