自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 资源 (14)
  • 收藏
  • 关注

原创 make_plural

string make_plural (size_t ctr , const string &word , const string &ending) { return ( ctr == 1 ) ? word : word + ending; } size_t是一种整型的变量,宽度应该是比int大的,整个函数的意思就是。你传递进来的ctr是1吗?如果是就返回word字符串,如果不是就将两个字符

2007-11-30 15:49:00 2642

转载 linux动/静态库的生成和使用

在小乌的眼里,库文件就是资源文件,也没有什么难以理解的;可是如果真要问得深入一点:“动态链接库和静态链接库有什么区别?”,“怎么做一个动态链接库?”,“怎么生成静态/动态链接库?”,“什么叫显示/隐示调用?”。。。小乌就郁闷了,所以今天决定要拍死这些问题。Window下面的动/静态链接库文件名分别为:.dll和.lib;Linux下则为:.so或.so.x和.a;.so文件的标准形式应该为:lib

2007-11-30 08:22:00 906

原创 Linux静态/动态链接库

和Windows系统一样Linux也有静态/动态链接库,下面介绍创建和使用方法:假设有下面几个文件:头文件String.h,声明相关函数原形,内容如下:Strlen.c:函数Strlen的实现,获取给定字符串的长度,内容如下:Strlnen.c:函数StrNlen的实现,获取给定字符串的长度,如果输入字符串的长度大于指定的最大长度,则返回最大长度,否者返回字符串的实际长度,内容如下:生成静态库

2007-11-30 00:26:00 876

原创 epoll使用例子

在大家苦苦的为在线人数的增长而导致的系统资源吃紧上的问题正在发愁的时候,Linux 2.6内核中提供的System Epoll为我们提供了一套完美的解决方案。传统的select以及poll的效率会因为在线人数的线形递增而导致呈二次乃至三次方的下降,这些直接导致了网络服务器可以支持的人数有了个比较明显的限制。 自从Linux提供了/dev/epoll的设备以及后来2.6内核中对/dev/epoll设

2007-11-26 20:57:00 1236

转载 使用AutoMake轻松生成Makefile

摘要: 在 Unix 上写过程序的人一般都遇到过 Makefile,尤其是用 C 来开发程序的人。用 make 来开发和编译程序的确很方便,可是要写出一个MakeFile就不那么简单了。偏偏介紹 Makefile 的文件不多,GNU Make

2007-11-26 09:20:00 765

原创 libpcap抓包简单例子

#include #include #include #include #include void tcp_packet_callback(unsigned char *argument,const struct pcap_pkthdr* pcap_header,const unsigned char *packet_content) { struct tcphdr *tcpptr=(stru

2007-11-25 20:28:00 5799 1

原创 libpcap函数库框架和使用

 libpcap函数库框架和使用libpcap的英文意思是 Packet Capture library,即数据包捕获函数库。该库提供的C函数接口可用于需要捕获经过网络接口(通过将网卡设置为混杂模式,可以捕获所有经过该接口的数据报,目标地址不一定为本机)数据包的系统开发上。著名的TCPDUMP就是在libpcap的基础上开发而成的。libpcap提供的接口函数主要实现和封装了与数据包截获有

2007-11-25 20:21:00 1405

原创 linux socket编程 udp connect例子

 #include #include #include #include #include #include #include #include void process_client(int s) {     char buff[128];     int rc,maxfd;     while(fgets(buff,sizeof(buff),stdin)!=NULL) {    

2007-11-25 20:18:00 2931

原创 linux socket编程服务端模型(用getaddrinfo)

//server_wait.c#include "unistd.h"#include "sys/types.h"#include "sys/socket.h"#include "netinet/in.h"#include "arpa/inet.h"#include "stdio.h"#include "string.h"#include #include #include #include

2007-11-25 20:15:00 2719 1

原创 linux socket编程客户端模型(用getaddrinfo)

#include "unistd.h"#include "sys/types.h"#include "sys/socket.h"#include "netinet/in.h"#include "arpa/inet.h"#include "stdio.h"#include "string.h"#include #include #include #includ

2007-11-25 20:13:00 1846 1

原创 ping简单实现

#include "strings.h"#include "stdio.h"#include "unistd.h"#include "sys/types.h"#include "sys/socket.h"#include "netinet/in.h"#include "arpa/inet.h"#include "sys/wait.h"#include "errno.h"#include "sys/

2007-11-25 20:05:00 943

原创 linux socket编程 用线程的服务器例子

#include #include #include #include #include #include #include #include #include #include struct sockargs { int s; struct sockaddr_in *remote; };void* process_server(void *args) {     int len,s;  

2007-11-25 20:03:00 705

原创 linux socket编程 daemon例子

#include #include #include #include #include #include #include #include #include #include #include typedef  void (*Sigfunc)(int);void reap_status() { int pid;  int status; while((pid = wait3(&status

2007-11-25 20:02:00 1605

原创 unxi域协议编程客户端(tcp/udp)

//unixpositive.c#include #include #include #include #include #include #include void error(int status, int err,char *fmt, ...) { va_list ap; va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap)

2007-11-25 20:01:00 672

原创 unxi域协议编程服务器端(tcp/udp)

//unixserver.c#include #include #include #include #include #include #include void error(int status, int err,char *fmt, ...) { va_list ap; va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap); if

2007-11-25 19:58:00 724

原创 linux socket编程 多协议服务器例子

 #include #include #include #include #include #include #include #include #include #include void sig_child() { pid_t pid; int status; while((pid=waitpid(-1,&status,WNOHANG))>0)  printf("%d terminated

2007-11-25 19:53:00 760

原创 linux网络socket编程客户端端(tcp/udp)

//positve.c //对tcp和udp均适用#include #include #include #include #include #include void error(int status, int err,char *fmt, ...) { va_list ap; va_start(ap, fmt); vfprintf(stderr,

2007-11-25 19:49:00 1063

原创 linux网络socket编程服务器端(tcp/udp)

//passive.c 对tcp和udp通用#include #include #include #include #include #include void error(int status, int err,char *fmt, ...) { va_list ap; va_start(ap, fmt); vfprintf(stderr, fmt

2007-11-25 19:45:00 1282

原创 CreateThread

随着时代的发展,计算机技术发展得很快。CPU已经从单核心到多核心的转变,也就是一个CPU里具备了同时做多件事情的能力,而不是过去的分时复用了,而是实实在在地做多件事情。因此,开发软件也进入了一个新时代,就是多线程软件的开发时代。如何合理地分配多个线程同时运行,是提高软件效率的关键因素了。比如像网络游戏的客户端里,就可以使用一个线程不断地更新游戏的界面,分配另外一个线程不断地发送和接收网络的数据,这

2007-11-23 18:14:00 591

原创 像素,分辨率

DPI表示分辨率,指每英寸长度上的点数.DPI又可细分为水平分辨率和垂直分辨率,例如一张1英寸*1英寸的图片,如果它的水平分辨率是100 dpi,垂直分辨率是50 dpi,那么就是说,它水平每英寸分成100小段,垂直每英寸分成50小段,就像米尺上的一格格那样.这张图总共有100*50=5000个格子,这张图片共有5000像素.由于它的水平分辨率和垂直分辨率不相等,所以每个像素是一个微小的长方形.

2007-11-17 23:42:00 979

原创 深入理解指针

void f2(char *c){ c=(char *)malloc(128); }main(){char *c1=NULL;f2(c1); 返回时得不到分配的地址。}//////////////////////////void f2(char **c){ *c=(char *)malloc(128); }main(){char *c1=NULL;f2(&c1); 返回时将得到分配的地址。

2007-11-17 15:08:00 525

转载 inline

(一)inline函数(摘自C++ Primer的第三版)         在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联。   inline int min(int first, int secend) {/****/};      inline函数对编译器而言必须是可见的,以便它能够在调用点内展开该函数。与非inline函数不同的是,inline函数

2007-11-15 11:37:00 490

转载 vc预编译头文件

所谓的预编译头就是把一个工程中的某一部分代码,预先编译好放在一个文件里(通常是以.pch为扩展名的),这个文件就称为预编译头文件。这些预先编译好的代码可以是任何的C/C++代码,但是必须是稳定的,在工程开发的过程中不会被经常改变。如果这些代码被修改,则需要重新编译生成预编译头文件。生成预编译头文件很耗时间。预编译头文件通常很大,通常有6-7M大。应该及时清理那些没有用的预编译头文件。      

2007-11-07 21:56:00 1238

原创 带参数的windows服务程序

#include #include #include "hash.h"#include "debug.h"#include "stdio.h"#include "mytime.h"#define SERV_NAME "GPRSServer"//DWORD WINAPI Run( LPVOID lpParam );DWORD WINAPI Run(char *argv0,char *ar

2007-11-03 19:03:00 2891

转载 Windows服务编写原理及探讨

 Windows服务编写原理及探讨有那么一类应用程序,是能够为各种用户(包括本地用户和远程用户)所用的,拥有用户授权级进行管理的能力,并且不论用户是否物理的与正在运行该应用程序的计算机相连都能正常执行,这就是所谓的服务了。(一)服务的基础知识Question 1. 什么是服务?它的特征是什么?  在NT/2000中,服务是一类受到操作系统优待的程序。一个服务首先是一个Win32可执行程序,

2007-11-03 18:53:00 776

转载 volatile

volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。使用该关键字的例子如下:int volatile nVint;  当要求使用volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面

2007-11-02 22:06:00 477

转载 可重入函数

一、可重入函数1)什么是可重入性?可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反, 不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。2)可重入函数

2007-11-02 22:01:00 847

C++网络编程 卷1 运用ACE和模式消除复杂性

C++网络编程 卷1 运用ACE和模式消除复杂性

2009-07-16

C++网络编程 卷1 运用ACE和模式消除复杂性

C++网络编程 卷1 运用ACE和模式消除复杂性

2009-07-16

C++网络编程 卷1 运用ACE和模式消除复杂性

C++网络编程 卷1 运用ACE和模式消除复杂性

2009-07-16

C++网络编程 卷1 运用ACE和模式消除复杂性

C++网络编程 卷1 运用ACE和模式消除复杂性

2009-07-16

基于C++CORBA高级编程.

基于C++CORBA高级编程.基于C++CORBA高级编程.

2009-07-16

基于C++CORBA高级编程.

基于C++CORBA高级编程.基于C++CORBA高级编程.

2009-07-16

基于C++CORBA高级编程.

基于C++CORBA高级编程.基于C++CORBA高级编程.

2009-07-16

QTTabBar_1.2.2.1_glb

QTTabBar_1.2.2.1_glb.zip ,使资源管理器有多标签的功能,强烈推荐。

2009-03-06

WndTabs320

WndTabs320,使vc6.0拥有标签功能

2009-03-06

VisualAssistX+v10.5.1715

VisualAssistX+v10.5.1715

2009-03-06

SourceStyler_v1.3 + 汉化补丁 + keygen

SourceStyler_v1.3 + 汉化补丁 + keygen

2009-03-04

大内高手(详细的内存知识)

大内高手,介绍内存相关的知识 我一直认为作为一个在linux下工作的C程序员,若对内存有深刻的认识,不但程序的性能会更高,运行更稳定,编程速度也会更快。反之亦有相反的效果,有时一些内存错误让你摸不着头脑,不但大大降低开发速度,开发出来的软件稳定性也值得怀疑。 为了提高组员的编程水平,去年我制定了一系列的培训计划,并负责主讲部分重要课程,其中基础类课程中,有一堂关于内存的课程。当时的讲稿写得很粗略,后来的新同事说看不明白,我决定重新整理一下,放在BLOG,希望对新手有所帮助。 至于文章的标题,基本上是为了搞笑。最近重温星爷经典《大内密探零零发》,这是以大内高手作为文章的标题原因之一。另外也可以这样理解,内指内存,至于大字,修饰内存指其容量大,修饰内存高手形容水平很高,两种理解都可以。

2008-09-10

The.Linux.Networking.Architecture_Design.and.Implementation

The.Linux.Networking.Architecture_Design.and.Implementation

2007-08-16

Linux Kernel

Linux Kernel

2007-08-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除