- 博客(33)
- 资源 (1)
- 收藏
- 关注
原创 C++中的enum和nested class使用简介
#include iostream>using namespace std;class A...{public: enum Sex...{ MAN=0, FEMAL }; class Result...{ public: Result(int age=1):age_(age)...{ } int getAge()..
2006-08-18 17:01:00 1549
原创 Asynchronous I/O一段介绍异步I/O
Asynchronous I/O means non-blocking I/O. If a process attempts to read or write using the normal, synchronous read() or write() system calls, then it must wait until the hardware has completed the phy
2006-08-18 14:32:00 1254
转载 [转贴]关于Debug和Release之本质区别
--------------------------------------本文主要包含如下内容:1. Debug 和 Release 编译方式的本质区别2. 哪些情况下 Release 版会出错3. 怎样“调试” Release 版的程序-------------------------------------- 关于Debug和Release之本质区别的讨论一、Deb
2006-08-18 11:32:00 1060
原创 Linux之线程同步篇
进行多线程编程,最头疼的就是那些共享的数据。因为你无法知道哪个线程会在哪个时候对它进行操作,你也无法得知那个线程会先运行,哪个线程会后运行。下面介绍一些技术,通过他们,你会合理安排你的线程之间对资源的竞争。l 互斥体Mutexl 信号灯Semophorel 条件变量Conditions先说一下互斥量。什么时候会用上互斥量了?比如你
2006-07-21 14:21:00 6147
原创 Linux之线程篇
所有线程都有一个线程号,也就是Thread ID。其类型为pthread_t。通过调用pthread_self()函数可以获得自身的线程号。下面说一下如何创建一个线程。通过创建线程,线程将会执行一个线程函数,该线程格式必须按照下面来声明: void * Thread_Function(void *)创建线程的函数如下: int pthread_creat
2006-07-21 14:18:00 4869 3
原创 Linux之进程篇
何谓进程?进程就是一个正在运行着的程序实例。在Linux中,每一个进程都有一个进程号(Process ID)来标示身份。在shell中你可以通过ps命令来查看。 [liyong@localhost temp]$ ps PID TTY TIME CMD
2006-07-21 14:15:00 2407
原创 TCP/UDP
UDP为用户数据报协议,提供无连接服务,每个数据报都有一定长度。UDP不关心数据是否发送成功,这一切需要上层来保证。TCP为传输控制协议,提供面向连接,给用户提供全双工的字节流。TCP关心确认、超时和重传等细节。tcp提供流量控制,告诉对方自己的通告窗口(advertised window)TCP连接的三次握手TCP在建立连接的时候需要三次交互:首先,服务器端需要创建SOCKET,并执行bin
2006-06-13 17:13:00 1943
原创 简单进程和信号处理
进程的定义:一个其中运行有一个或多个线程的地址空间和线程要求使用的系统资源。简单而言,进程就是一个正在运行中的程序。进程由程序代码、数据、变量、打开的文件(文件描述符)和一个环境组成。每一个进程都拥有一个独一无二的PID,称之为进程标示码。这是一个正整数,范围为2-32768。进程号为1的永远是init进程。UNIX/Lunix系统通过一个进程表的数据结构来管理进程。进程表包括进程的PID,进程的
2006-05-17 13:53:00 1703
转载 数学题求解
有这么一道数学题: * * * ---- + ---- + ---- =1 ** ** ** *为1~9的数字,每个数字必须用且只能用一次。分母为两位数。 可以用排列的生成算法枚举所有的情况(当然,还有其他方法,但最好要优化)double a[10];int i=345126789,ii;//1,2显然不能是分子,设a[1],a[2],a[3]为分子且a[1
2006-05-15 16:29:00 1244 1
原创 类成员函数指针
类成员函数指针类的成员函数分为两种,一种是静态函数,另外一种是非静态函数。例如:class X{public: static void display(); bool getValue();}display()为静态函数,getValue即为非静态函数。两种函数在使用的时候是不一样的。静态函数可以直接由类名来调用,而非静态函数则必须通过某一个对象来调用,例如:X::display();X x;x.
2006-05-15 16:03:00 4860
原创 选择排序、插入排序、希尔排序
//Select Sort an array//选择排序://每一次从数组里选择出下一个最小(或者最大)的元素,//将他排到指定的位置// 5 1 1 1 1// 1 5 2 2 2// 2 2 5 5 5// 9 9 9 9 8// 8 8 8 8 9// 15 52 5:in 89//缺点:即使数组已经排好序,它仍然每一次都遍历剩下的元素//选
2006-05-11 10:57:00 1131
原创 Hash散列算法详细解析(三)
4 ripemd算法 顾名思义ripemd就是成熟md算法,是Hans Dobbertin等3人在md4,md5的基础上,于1996年提出来的。算法共有4个标准128、160、256和320,其对应输出长度分别为16字节、20字节、32字节和40字节。不过,让人难以致信的是ripemd的设计者们根本就没有真正设计256和320位这2种标准,他们只是在128位和160位的基础上,修
2006-05-11 10:54:00 3241
转载 Hash散列算法详细解析(二)
3 MD5算法 md5算法定义在RFC 1321中,由Ron Rivest(RSA公司)在1992年提出。然而很多学者已经找出了构造md5冲突的方法。这些人中包括中国山东大学的王教授和Hans Dobbertin。所以,单纯使用md5的信息认证模式变得不可靠了。但并不是说md5不能够使用。 md5算法的计算步骤: 通过添加一个1和若干个0的方式,把输入数据
2006-05-11 10:53:00 3341
原创 Hash散列算法详细解析(一)
Hash散列算法详细解析(一)作者:冲出宇宙时间:2005年10月30日转载请注明作者。本文详细描述了hash算法的通用模式,在这个基础上对目前作为标准的几种主要hash算法进行了一些分析:md5,ripemd系列,sha系列,tiger以及刚加入到标准不久的whirlpool。给出了部分算法的代码。1 hash定义 传统hash函数的定义:一个hash函数满足下列条
2006-05-11 10:51:00 6204
原创 虚拟函数的调用
有这么一段代码:#include using namespace std;class Base{public: virtual void display(){cout void set(){display();}};class Derived:public Base{public: void display(){cout};int main
2006-05-09 16:17:00 930
原创 一个二叉查找树的代码
#ifndef H_BTree_#define H_BTree_#include #include using namespace std;class Node{ friend class Tree; private: int key_; string data_; Node * lchild; Node * rchild; public: Node(string data,i
2006-04-30 14:59:00 812
原创 SHELL 命令简述
suid/guid分析suid/guid位可以使文件的执行者获得文件创建者或所在组的权限。比如当对某个脚本设置了suid位,那么其他用户在执行这一脚本时也会具有该脚本属主的相应权限,执行完毕后又回到原有权限。在设置该位之前,相应的执行权限位必须要被设置。下面是使用符号模式的设置。$ls$ rwx r-x r-x filename$chmod u+s filename$ls $ rws r-x
2006-04-21 17:02:00 1542
原创 Linux之向脚本传参数
Linux之向脚本传参数之前我们向脚本传递参数可以通过$1,$2等特殊变量。很方便,但是有些限制,就是不能超过9个参数。通过使用shift和getopts命令,我们可以十分方便的向脚本传递参数。一、shift通过使用shift,我们将参数选项从左向右移。看下面这个例子:#!/bin/sh# shift_sampleif [ $# -lt 1 ] echo "too few params" ex
2006-03-08 16:22:00 4879
原创 shell中定义函数
定义函数函数由两部分组成:函数标题和函数体。定义函数的格式:function 函数名(){ 命令1 。。。}函数可以放在同一个文件中作为一段代码,也可以放在只包含函数的单独文件中。所有函数在使用前必须定义。如果需要向函数传递参数,则可以使用特殊变量$1,$2...函数取得所传参数后,将原始参数传回SHELL脚本。函数里调用参数(变量)的转换以下划线开始,后加变量名。如需提前从函数中返回,可以使用r
2006-03-08 14:11:00 5794
原创 控制流结构
控制流结构一、退出状态每个命令执行完之后都回返回状态,0表示执行成功,1表示执行失败二、循环和控制语句1。if then else语句格式如下:if 条件1 then 命令1elif 条件2 then 命令2else 命令3fi使用fi语句时,必须将then部分放在新行。要么就使用;分隔符。NULL为空命令,该命令永远为真。if 条件1then : #do nothingfi
2006-03-07 11:35:00 803
原创 条件测试
条件测试一、测试文件状态测试文件状态有两种方式,一种是使用test命令,另一种使用[]方式。test的格式如下:test condition[]格式如下:[ condition ]注意,condition两边需要加上空格。常规的文件状态测试条件如下:-d:目录-f:正规文件-L:符号链接-r:可读-s:文件非空-W:可写-u:文件suid位设置-x:可执行二、逻辑操作符如果需要同时比较两个文件的话
2006-03-02 14:50:00 876
原创 Linux Shell变量使用
一、本地变量的使用本地变量就如同局部变量一样,只在本SHELL中起作用。它不会影响到其他SHELL中的变量。1。显示变量值可以使用echo命令。需要注意的是,使用变量的时候必须在变量名前加上$符号2。清除变量使用unset命令可以清除命令。3。显示所有本地SHELL变量SHELL中预定义了一些环境变量。要想显示这些命令,可以使用set命令。另外,用户自己已经定义过的本地变量也会在其中显示
2006-03-01 11:41:00 2364
原创 使用内存块
#include #include class counted{ class memblock{ enum { size=100 }; char c[size]; int refcount; public: memblock(){ memset(c,1,size); refcount=1; } memblock(const memblock & rv){ memcpy(
2006-02-16 16:51:00 681
原创 内联函数
C++中对宏的使用已经处处限制,并提倡使用内联函数。编译器对宏的处理是在预处理器阶段,然而预处理器宏存在了一些问题,比如没有安全检查,行为容易混淆。在C++中,任何在类中定义的函数自动成为内联函数,你也可以使用inline关键在在外面定义函数前面使之成为内滥函数。内联函数为何有效?对于任何函数,编译器在它的符号表中放入函数类型(即包括名字、函数原型、参数类型已经返回类型)的信息。对于内联函数,编译
2006-02-15 15:41:00 747
原创 Active FTP vs. Passive FTP, a Definitive Explanation
使用FTP时会遇到Acctive Mode和Passive MOde两种模式。两种模式有什么区别了?FTP是建立在TCP上的,没有UDP的FTP。FTP有两个端口,一个是命令端口(Command Port),另一个是数据端口(Data Port)。命令端口常见为21,数据端口常见为20。Active Mode在Active Mode中,当有客户端连接FTP服务器时,客户端首先随机生成两个端
2006-02-09 11:30:00 1922
原创 函数调用约定(转)
1._stdcall是Pascal程序的缺省调用方式,通常用于Win32 Api中,函数采用从右到左的压栈方式,自己在退出时清空堆栈。VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上@和参数的字节数。 2、C调用约定(即用__cdecl关键字说明)按从右至左的顺序压参数入栈,由调用者把参数弹出栈。对于传送参数的内存栈是由调用者来维护的(正因为如此,实现可变参数的函数只能使用该
2006-01-11 14:21:00 697
转载 Linux下软件的安装与卸载
一、二进制分发软件包的安装与卸载 Linux软件的二进制分发是指事先已经编译好二进制形式的软件包的发布形式,其优点是安装使用容易,缺点则是缺乏灵活性,如果该软件包是为特定的硬件/操作系统平台编译的,那它就不能在另外的平台或环境下正确执行。 1、*.rpm形式的二进制软件包 安装:rpm -ivh *.rpm 卸载:rpm -e packgename 说明:RPM(RedHat Packge
2006-01-05 14:20:00 769
原创 微软 MSN 2005 校园招聘(西安站)笔试题
SECTION ⅠInstruction: You are not allowed to use any library or API calls. Your answer will be evaluated from the following aspects: correctness, algorithm efficiency, error handing. API interface, an
2005-12-29 16:11:00 994
原创 迷宫寻找路径算法
基于下面的思想:here:目前的位置dest:出口位置path:路径栈1:有障碍,0:有路1、查找here周围的点,看看是否有路2、如果有,则here=1,将原位置压入栈,再将here指向新的位置3、没有,path.pop(pop),跳回步骤1。4、如果没有点,即栈为空,则无法找到路径void FindRouth(){ const int ROW=12; //该迷宫外面一圈为障碍墙 const
2005-12-29 15:12:00 1958
原创 稀疏矩阵的一个实现
#include using namespace std;templateclass LinkedList{ public: LinkedList(); ~LinkedList(); void Insert(const T & value); T * Get(int index); int GetLength() const{return length; } T * Find(con
2005-12-26 16:38:00 992
原创 STL_vector学习笔记
Vectors模型是一个动态数组。需要添加头文件。原型定义如下:namespace std { template class Allocator = allocator > class vector; }allocator是指内存模型。和其他容器类一样,vector将元素拷贝到其内部,而非想象中的引用。这样,如果你修改了原先的元素,ve
2005-12-07 15:37:00 2166
原创 Asterisk介绍
Asterisk是一个开源的软PBX,它由Digium公司开发并一直在不断的进展之中。Asterisk可以运行在Linux和其他Unix平台上,你可以选择或者也可以不选择链接到PSTN的硬件。Asterisk在PSTN和VoIP上都提供很好的实时链接。Asterisk的通道维护着VoIP和PSTN上的各种形式的链接,包含的VoIP协议有SIP,IAX,MGCP和H.323。电话和软电话都必须连接
2005-10-19 14:58:00 2801 1
原创 Linux 学习小记:Linux下C开发工具介绍
Linux下C开发工具介绍 Linux的发行版中包含了很多软件开发工具. 它们中的很多是用于 C 和 C++应用程序开发 的. 本文介绍了在 Linux 下能用于 C 应用程序开发和调试的工具. 本文的主旨是介绍如 何在 Linux 下使用 C 编译器和其他 C 编程工具, 而非 C 语言编程的教程. GNU C 编译器 GNU C 编译器(GCC)是一个全功能的 ANSI C 兼容编译器. 如果
2005-08-22 14:55:00 1480
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人