- 博客(20)
- 资源 (1)
- 收藏
- 关注
转载 C++ Singleton (单例) 模式最优实现
我非常赞成合理的使用 设计模式 能让代码更容易理解和维护, 不过我自己除了简单的 单例 (Singleton) 模式 外, 其它都很少用 :-)可耻的是, 直到前段时间拜读了 C++ In Theory: The Singleton Pattern, Part I, 我才发现自己的 单例 (Singleton) 模式 写法还有改进空间.文章作者 J. Nakamura 以
2013-08-14 16:59:07
390
转载 GDB调试core文件样例(如何定位Segment fault)
core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (linux中如果内存越界会收到SIGSEGV信号,然后就会core dump)在程序运行的过程中,有的时候我们会遇到Segment fault(段错误)这样的错误。这种看起来比较困难,因为没有任何的栈、trace信息输出。该种类
2013-06-03 15:44:16
496
转载 IP和TCP包头校验和的计算方法
校验和的算法:将数据以字为单位累加到一个双字中,如果数据长度为奇数,最后一个字节要先变成字,然后在加到原来的双字中,最后得到的结果是一个双字,最后将这个双字的高16位和低16位反复相加,直到高16位为0,从而就获得一个16位的值,再将这个16位的值取反就得到校验和的值了。在接收端接收到IP数据包后,要对IP头进行检查看是否有误,所用的算法与上面一致,不同的是最终的结果要为0。
2013-05-29 10:11:40
837
转载 Linux C面试题(内存管理)
找错题 试题1:void test1(){ char string[10]; char* str1 = "0123456789"; strcpy( string, str1 );} 试题2:void test2(){ char string[10], str1[10]; int i; for
2013-05-28 16:35:26
453
转载 用GDB调试程序
GDB概述————GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。一般来说,GDB主要帮忙你完成下面四个方面的功能: 1、启动你的程序,可
2013-05-17 21:33:14
454
原创 排序
根据排序工程中借助的主要操作,我们将内排序分为:插入排序,交换排序,选择排序,归并排序。插入排序有:直接插入排序(增量永远为1的一个分组)和希尔排序(按增量递减分组后进行直接插入排序,increment=incremet/3+1)交换排序有:冒泡排序和快速排序。选择排序有:简单选择排序和堆排序。归并排序。这7种排序算法的各种指标进行对比:排序方法
2013-04-24 20:50:43
523
原创 接口操作——ioctl
ioctl 函数 本函数影响由fd 参数引用的一个打开的文件。 #includeint ioctl( int fd, int request, .../* void *arg */ );返回0 :成功 -1 :出错 第三个参数总是一个指针,但指针的类型依赖于request 参数。我们可以把和网络相关的请求划分为6 类:套接字操作文件操作接口操作
2013-04-03 11:19:51
560
转载 linux进程间通信(IPC)
linux下进程间通信的几种主要手段简介:管道(Pipe)及有名管道(FIFO):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函
2013-03-27 22:30:00
882
原创 守护进程
一、常用的守护进程简单介绍:Keventd:为在内核中运行计划执行的函数提供进程上下文。kapmd:高级电源管理。kswapd:页面调出。(将脏页面以低速写到磁盘上从而使这些页面在需要时仍可回收使用)bdflush:将脏缓冲区从缓存池中冲洗到磁盘上。kupdated:每个一定时间间隔,这个守护进程将脏页面冲洗到磁盘上。portmap:端口映射提供将RPC程序号映射为
2013-03-21 17:46:31
518
转载 socket编程函数和步骤
TCP编程的服务器端一般步骤是1、 创建一个socket,用函数socket();2、 设置socket属性,用函数setsockopt(); * 可选3、 绑定IP地址、端口等信息到socket上,用函数bind();4、 开启监听,用函数listen();5、 接收客户端上来的连接,用函数accept();6、 收发数据,用函数send()和re
2013-03-20 17:46:54
4245
原创 名字与地址(端口)转换——gethostbyname/gethostbyaddr(getservbyname/getservbyport)
函数原型:#include struct hostent *gethostbyname(const char *name);这个函数的传入值是域名或者主机名,例如"www.google.com","wpc"等等。传出值,是一个hostent的结构(如下)。如果函数调用失败,将返回NULL。struct hostent { char *h_name; c
2013-03-19 16:37:39
881
原创 I/O复用——select
I/O复用典型使用在下列网络应用场合:1.当客户处理多个描述符(通常是交互式输入和网络套接字)时,必须使用I/O复用。2.如果一个TCP服务器既要处理监听套接字,又要处理已连接套接字,一般就要使用I/O复用。3.如果一个服务器既要处理TCP,又要处理UDP,一般就要使用I/O复用。4.如果一个服务器要处理多个服务或者多个协议,一般就要使用I/O复用。函数原型:#in
2013-03-18 23:11:39
421
原创 获取和设置套接字选项——getsockopt/setsockopt
函数原型:#include int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);
2013-03-17 16:16:17
1990
转载 makefile
概述 —— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefil
2013-03-15 11:48:53
447
原创 去掉输入参数的tcping
/* tcping does a nonblocking connect to test if a port is reachable. * Its exit codes are: * -1 an error occured * 0 port is open * 1 port is closed * 2 user timeout *
2013-03-14 22:03:20
910
原创 文件控制--fcntl()
在介绍文件控制函数之前,先看看linux系统是如何管理进程中打开的文件。1.每个进程在进程表项中都有一个记录项,记录项中包含有一张打开文件描述符表,可将其视为一个矢量,每个描述符占用一项。与每个文件描述符相关联的是:(a)文件描述符标志(close_on_exec).(b)指向一个文件表项的指针。2.内核为所有打开文件维持一张文件表,每个文件表项包含:(a)文件状态标志(读、写
2013-03-14 17:00:25
591
转载 简明 Vim 练级攻略
我建议下面这四个步骤:存活感觉良好觉得更好,更强,更快使用VIM的超能力当你走完这篇文章,你会成为一个vim的 superstar。在开始学习以前,我需要给你一些警告:学习vim在开始时是痛苦的。需要时间需要不断地练习,就像你学习一个乐器一样。不要期望你能在3天内把vim练得比别的编辑器更有效率。事实上,你需要2周时间的苦练,而不是3天。第一级 –
2013-03-13 10:18:59
427
原创 简单的DNS请求报文实现
DNS数据包包括DNS协议头+DNS正文段。协议头为固定的12字节,结构如下:typedef struct{ u16 id; u16 flags; u16 nques; u16 nanswer; u16 nauth; u16 naddi;}dns_header;查询ip的正文包括域名值和请求类型标识字段。结构如下:
2013-03-12 12:39:15
2759
原创 linux下NAT内网连通IPv6的实现
网络拓扑图如下:· eth0为网关WAN口,接入广域网。· eth1为网关LAN口,接入局域网。主要配置:1. linux服务器接口的ipv6地址配置# sysctl net.ipv6.conf.all.forwarding=1 //打开ipv6转发功能;#ip addr add 2001:250:1006:5066:
2013-03-12 12:13:37
4031
原创 简单的web服务器实现
#include #include #include #include #include #include #include #include #include #define MAXLINE 2048 #define PORT 12345 #define WebRoot "/home/xrf/www" /* 字符串s1 是否以字符串 s2结
2013-03-12 11:04:42
563
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人