- 博客(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
大内高手(详细的内存知识)
2008-09-10
The.Linux.Networking.Architecture_Design.and.Implementation
2007-08-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人