
C编程
文章平均质量分 59
zhulinfeiba
越是不敢做的事情越是要去做,越是令自己恐惧的事情越是要去做,越是自己没信心的事情越要去做!!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux select()详解(转载)
Linux select()详解 select系统调用是用来让我们的程序监视多个文件句柄(file descriptor)的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有某一个或多个发生了状态改变。文件在句柄在Linux里很多,如果你man某个函数,在函数返回值部分说到成功后有一个文件句柄被创建的都是的,如man socket可以看到“On su转载 2009-03-01 23:14:00 · 936 阅读 · 0 评论 -
10个经典的字符串hash函数的C代码实现
所有内容均来自于:http://www.partow.net/programming/hashfunctions/以下总共给出了10种字符串hash函数,在上面的链接中可以找到各个Hash函数的描述,以及一些其它的关于hash函数的资料下载。这些hash函数各自的优缺点不详。其中,ELFHash函数是在unix系统中被广泛使用的,也是《算法艺术与信息学竞赛》中作者推荐的一个字符串hash函数。DEKHash函数是Knuth在其《The Art of Computer Programming》第三卷中引入的。转载 2010-11-29 11:34:00 · 676 阅读 · 0 评论 -
typedef的四个用途和两个陷阱
<br />用途一: <br />定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如: <br />char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, <br />// 和一个字符变量; <br />以下则可行: <br />typedef char* PCHAR; // 一般用大写 <br />PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针 <br />虽然: <br />char *pa原创 2010-08-07 15:17:00 · 423 阅读 · 0 评论 -
pc link整合到source insight中,用于代码查错
原来是这样解决的,多谢各位啦:) <br /><br />一、安装。 <br /> 1。首先,将本目录下的文件全部拷贝到c:/lint之下。 <br /> 2。然后,在Source InSight 中,选择 Option-> Custom Commands... 弹 <br /> 出“Custom Commands”窗口。 <br /> 进行如下设置: <br /> 1) Command 不要填,Name填原创 2010-07-14 17:49:00 · 1922 阅读 · 0 评论 -
C语言常用宏定义技巧
1、防止一个头文件被重复包含#ifndef COMDEF_H#define COMDEF_H //头文件内容#endif2、重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。typedef unsigned char boolean; /* Boolean value type. */typedef unsigned long int转载 2010-01-05 15:13:00 · 517 阅读 · 0 评论 -
main函数和启动例程
2. main函数和启动例程 请点评为什么汇编程序的入口是_start,而C程序的入口是main函数呢?本节就来解释这个问题。在讲例 18.1 “最简单的汇编程序”时,我们的汇编和链接步骤是:$ as hello.s -o hello.o$ ld hello.o -o hello以前我们常用gcc main.c -o main命令编译一个程序,其实也可以分三步做,第一步生成汇编代码,第二步生成原创 2010-01-06 09:01:00 · 1635 阅读 · 0 评论 -
关于recv()和send()的返回值
当发送数据量较大时,send()函数不会一次性将数据发送出去(send()实际只是把数据拷贝到缓冲区中,然后由协议来发送),而是分多次发送,所以其返回值小于想要发送的数据长度。 recv()函数会等待对方的发送缓冲中的数据被协议传送完毕,然后才返回接收到的数据长度,所以其返回值等于接收到的总的数据长度。原创 2009-12-15 11:46:00 · 1523 阅读 · 0 评论 -
非阻塞(O_NONBLOCK)
非阻塞I/O使我们的操作要么成功,要么立即返回错误,不被阻塞。 对于一个给定的描述符两种方法对其指定非阻塞I/O: (1)调用open获得描述符,并指定O_NONBLOCK标志 (2)对已经打开的文件描述符,调用fcntl,打开O_NONBLOCK文件状态标志。flags = fcntl( s, F_GETFL, 0 ) )fcntl( s, F_SETFL, flags | O_NONBLO原创 2009-12-15 15:05:00 · 20828 阅读 · 0 评论 -
结构struct 联合Union和枚举Enum的细节讨论
联合(Union)是一种构造数据类型,它提供了一种使不同类型数据类型成员之间共享存储空间的方法,同时可以实现不同类型数据成员之间的自动类型转换。联合体对象在同一时间只能存储一个成员的值。联合的内存大小取决于其中字节数最多的成员,而不是累加,联合也会进行字长对齐。在定义联合变量的时候可以指定初始值,但是只能制定一个初始值(测试过似乎无法设置初值),而且该初始值的类型必须与联合的第一个成员的类型匹配。转载 2010-02-05 16:42:00 · 822 阅读 · 0 评论 -
Linux下c语言实现将一个目录下的所有文件和目录复制到另一个目录下
#include#include#include#include#include#include#includechar paths[1000],patht[1000],temp_paths[1000],temp_patht[1000];void Copy(char *spathname,char *tpathname){ int sfd,tfd; struct stat s,t;转载 2009-12-03 16:17:00 · 6664 阅读 · 1 评论 -
offsetof(TYPE, MEMBER)和 container_of(ptr, type, member)
offsetof(TYPE, MEMBER)该宏在Linux内核代码(版本2.6.22)中定义如下:#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER); 分析:(TYPE *)0,将 0 强制转换为 TYPE 型指针,记 p = (TYPE *)0,p是指向TYPE的指针,它的值是0。那么 p->MEMBER 就原创 2010-01-14 23:49:00 · 1500 阅读 · 0 评论 -
结构体指针
typedef struct aa{ int a; int b; char c;}AA;int main(){ int n, m; AA a; AA *p; p = &a; n = (char *)(p+1)-(char *)p; m = (AA*)(p+1) -(AA*)p; printf("%d, %d/n", n, m); } 结果:12, 1原创 2009-10-28 16:18:00 · 554 阅读 · 0 评论 -
linux C程序中执行和终止一个可执行程序
执行和终止一个可执行程序可用execvp():执行:char *arg[]= {"snmpd", "-c snmpd.conf"};execvp(arg[0], arg[]);终止killall:if (find_pid_by_name("dnsmasq") return ret;char *arg[]= {"killall", "-9", "snmpd"}; execvp(ar原创 2009-08-25 23:51:00 · 4095 阅读 · 0 评论 -
gcc -l参数和-L参数
·-l参数和-L参数-l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?就拿数学库来说,他的库名是m,他的库文件名是libm.so,很容易看出,把库文件名的头lib和尾.so去掉就是库名了好了现在我们知道怎么得到库名,当我们自已要用到一个第三方提供的库名字libtest.so,那么我们只要把libtest.so拷贝到/usr/lib里,编译时加转载 2009-08-20 00:21:00 · 3930 阅读 · 2 评论 -
malloc还可以这样用
int main() { char *p; char *name = "abc"; char *q; p = (char*)malloc(sizeof(char*) + strlen(name)+1); q = (char*)(&p[1]); strcpy(q, name);原创 2009-07-14 15:50:00 · 706 阅读 · 0 评论 -
likely 和 unlikely
这两个宏对程序运行结果没有影响,只是用于提高程序效率。其实现和gcc编译器密切相关。 具体点说,就是如果你觉得程序运行时候一般param = 0的可能性比较大,那么就加上likely的macro;反之则加unlikely。 首先要明确: if(likely(value)) 等价于 if(value) if(unlikely(value)) 也转载 2012-06-11 15:58:49 · 707 阅读 · 0 评论