
C/C++
文章平均质量分 82
zi_jin
关注互联网,关注Web前端技术动态
展开
-
系统设计之 网络模型(一)基础篇
全文针对linux环境。tcp/udp两种server种,tcp相对较复杂也相对比较常用。本文就从tcp server开始讲起。先从基本说起,看一个单线程的网络模型,处理流程如下:socket-->bind-->listen-->[accept-->read-->write-->close]-->close[]中代码循环运行,[]外的是对监听socket的处理,[]内的是对accept返回转载 2009-01-15 14:46:00 · 932 阅读 · 0 评论 -
Linux程序设计入门 - fork, pthread, and signals
在UNIX程序设计中,学会fork及signal的运用,算是相当基本的功夫。 fork()及signal经常运用在daemon守护神这一类常驻程序,另外像 a4c.tty/yact/chdrv这些中文终端机程序也有用到,一般如 Mozilla/Apache/Squid等大程序几乎都一定会用到。 虽然在UNIX下的程序写作,对thread的功转载 2009-01-15 17:47:00 · 1472 阅读 · 0 评论 -
Linux 2.6 内核Epoll用法举例说明
epoll用到的所有函数都是在头文件sys/epoll.h中声明的,下面简要说明所用到的数据结构和函数: 所用到的数据结构: typedef union epoll_data { void *ptr; int fd; __uint32_t u32;原创 2009-01-15 15:39:00 · 969 阅读 · 0 评论 -
程序调试的利器GDB
无论是多么优秀的程序员,都难以保证自己在编写代码时不会出现任何错误,因此调试是软件开发过程中的一个必不可少的组成部分。当程序完成编译之后,它很可能无法正常运行,或者会彻底崩溃,或者不能实现预期的功能。此时如何通过调试找到问题的症结所在,就变成了摆在开发人员面前最严峻的问题。通常说来,软件项目的规模越大,调试起来就会越困难,越需要一个强大而高效的调试器作为后盾。对于Linux程序员来讲,目前可供使用转载 2009-02-03 11:01:00 · 1494 阅读 · 0 评论 -
fork两次如何避免僵尸进程收藏
#include #include #include #include int main(void) { pid_t pid; if ((pid = fork()) < 0) { fprintf(stderr,"Fork error!/n"); exit(-1);转载 2009-02-04 10:05:00 · 11542 阅读 · 0 评论 -
c++中的堆和栈
1、内存分配方面: 堆:一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式是类似于链表。可能用到的关键字如下:new、malloc、delete、free等等。 栈:由编译器(Compiler)自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、申请方式方面: 堆:需要程序员转载 2009-04-17 10:10:00 · 667 阅读 · 0 评论 -
typedef的四个用途和两个陷阱
用途一: 定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如: char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量; 以下则可行: typedef char* PCHAR; // 一般用大写 PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针 虽然: ch原创 2009-12-13 10:59:00 · 1097 阅读 · 0 评论 -
linux中select()函数分析
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式转载 2009-05-25 15:08:00 · 157569 阅读 · 32 评论