随笔分类 -  C

Epoll为我们带来了什么
摘要:libevent中用到的,epoll是Linux下多路复用IO接口select/poll的增强版本。网上找到的介绍资料,无法标明来源。Q:网络服务器的瓶颈在哪?A:IO效率。在大家苦苦的为在线人数的增长而导致的系统资源吃紧上的问题正在发愁的时候,Linux2.6内核中提供的SystemEpoll为我们提供了一套完美的解决方案。传统的select以及poll的效率会因为在线人数的线形递增而导致呈二次乃至三次方的下降,这些直接导致了网络服务器可以支持的人数有了个比较明显的限制。自从Linux提供了/dev/epoll的设备以及后来2.6内核中对/dev/epoll设备的访问的封装(SystemEp 阅读全文

posted @ 2014-02-10 11:00 钢少 阅读(274) 评论(0) 推荐(0)

C内存管理相关内容--取自高质量C++&C编程指南
摘要:1.内存分配方式内存分配方式有三种:(1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。(3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。2.常见的内存错误及其对策 发生内存错误是件非 阅读全文

posted @ 2013-12-10 17:28 钢少 阅读(200) 评论(0) 推荐(0)

C语言学习笔记
摘要:C语言学习笔记一.关键字static的作用作用有三:1.在函数体内,被声明为静态的变量在这一函数被调用的过程中维持其值不变。2.在模块内(但在函数体外),被声明为静态的变量可以被模块内所有函数访问,但不能被模块外其他函数访问,它是一个本地的全局变量。3.在模块内,一个被声明为静态的函数只可以被这一模块内的其他函数调用,即这个函数被限制在声明它的本地范围内。二.如何用C编写死循环1.while(1){}2.for(;;){}3.Loop: ... goto Loop; 三.如何访问特定位置的内存eg.一个整型变量的绝对地址0x67a9,请将其值设为0xaa55 int* ptr; ... 阅读全文

posted @ 2013-12-10 15:27 钢少 阅读(179) 评论(0) 推荐(0)

Linus:利用二级指针删除单向链表
摘要:Linus大婶在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是他所喜好的,大婶表述了自己一些观点之后,举了一个指针的例子,解释了什么才是core low-level coding。下面是Linus的教学原文及翻译——“At the opposite end of the spectrum, I actually wish more people understood the really core low-level kind of coding. Not big, complex stuff like the lockless name lookup, but si 阅读全文

posted @ 2013-12-09 16:54 钢少 阅读(269) 评论(0) 推荐(0)

C语言的谜题
摘要:本篇文章《C语言的谜题》展示了14个C语言的迷题以及答案,代码应该是足够清楚的,而且我也相信有相当的一些例子可能是我们日常工作可能会见得到的。通过这些迷题,希望你能更了解C语言。如果你不看答案,不知道是否有把握回答各个谜题?让我们来试试。1、下面的程序并不见得会输出 hello-std-out,你知道为什么吗?123456789101112#include #include int main() {while(1){fprintf(stdout,"hello-std-out");fprintf(stderr,"hello-std-err");sleep( 阅读全文

posted @ 2013-12-09 15:40 钢少 阅读(208) 评论(0) 推荐(0)

Linux环境进程间通信: 共享内存
摘要:Linux环境进程间通信: 共享内存第一部分共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。——————————————-采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据[1]:一次从输入文件到共享内存区,另一次从共 阅读全文

posted @ 2013-12-04 11:57 钢少 阅读(356) 评论(0) 推荐(0)

linux c 获取当前时间 毫秒级的 unix网络编程
摘要:#include #inlcude char *gf_time(void) /* get the time */{ struct timeval tv; static char str[30]; char *ptr; if (gettimeofday(&tv, NULL) < 0) err_sys("gettimeofday error"); ptr = ctime(&tv.tv_sec); strcpy(str, &ptr[11]); /* Fri Sep 13 00:00:00 1986\n\0 */ /* 0123456789012345 阅读全文

posted @ 2013-12-02 15:14 钢少 阅读(664) 评论(0) 推荐(0)