自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(121)
  • 资源 (8)
  • 收藏
  • 关注

原创 小顶堆排序的实现

1、堆排序 第一步都是先建堆,在一个数组上建堆其实就是dui

2014-05-07 15:04:16 1503

转载 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值

recv:阻塞与非阻塞recv返回值没有区分,都是 0接收到数据大小,特别:非阻塞模式下返回 值 只是阻塞模式下recv会阻塞着接收数据,非阻塞模式下如果没有数据会返回,不会阻塞着读,因此需要 循环读取。

2014-04-16 17:17:05 5156

转载 socket 非阻塞模式下的connect封装实现

flags = fcntl(sockfd, F_GETFL, 0); fcntl(sockfd, F_SETFL, flags | O_NONBLOCK); if ((retVal = connect(sockfd, saptr, salen)) < 0) if (errno != EINPROGRESS) return (-1); if (retVal == 0) {

2014-04-16 17:05:01 863

原创 socket recv封装

利用select 触发来进行封装socket  recv函数

2014-04-15 22:02:02 396

原创 一道指针题目

int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序,返回值为原数据中第一个元素为0的下标。(尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路)

2014-04-11 16:39:44 431

原创 二叉树的非递归遍历

1.非递归前序遍历

2014-03-20 10:18:43 98

转载 KMP算法分析

转自 http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html 字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完成这个任务,Kn

2014-03-13 21:29:33 450

原创 KMP算法实现

#include #include #include using namespace std;int * cover(string &pattern){ /*pattern = "abcdab"*/ int size = pattern.size(); int *p = new int[size]; int length = 0,r = size;

2014-03-13 21:24:26 381

原创 c++ 创建类时 内部函数的选择

假设f是想正确声明的函数,c是和它相关的类:虚函数必须是成员函数。如果f必须是虚函数,就让它成为c的成员函数。operator>>和operator>或operatoreg,  friend ostream& operator只有非成员函数对最左边的参数进行类型转换。如果f需要对最左边的参数进行类型转换,让f成为非成员函数。如果f还需要访问c的非公有成员,让f成为c的友元函

2014-02-19 14:51:04 474

转载 链表头结点作用

转自:http://blog.chinaunix.net/space.php?uid=20754930&do=blog&id=3336495数据结构中,在单链表的开始结点之前附设一个类型相同的结点,称之为头结点。头结点的数据域可以不存储任何信息,头结点的指针域存储指向开始结点的指针(即第一个元素结点的存储位置)。作用1、防止单链表是空的而设的.当链表为空的时候,带头结点的头指针就指向头

2014-02-14 12:48:45 4175

原创 Linux 同步的一些理解

读写锁1、只要没有线程持有某个给定的读写锁用于写,那么任意数目的线程可以持有该读写锁用于读。2、仅当没有线程持有该给定的读写锁用于读或者写时,才能分配该读写锁用于写这种对于给定的某个资源的共享访问称为 共享--独占上锁。获取一个读写锁用于读称为共享锁,获取一个读写锁用于写称为独占锁。读写锁的数据类型为pthread_rwlock_t静态初始化 pthread_rwloc

2014-01-22 19:25:28 532

转载 Linux getopt 函数用法

Linux程序中一般都是依据getopt 函数来获取参数,使用方法如下实例代码#include #include #include int main(int argc, char **argv){ int ch; opterr = 0; while((ch = getopt(argc, argv, "a:b::def")) != -1) {

2014-01-15 23:18:40 501

转载 信号屏蔽字

有时候我们希望进程正确的执行,而不想进程受到信号的影响,比如我们希望上面那个程序在1秒钟之后不结束。这个时候我们就要进行信号的操作了。信号操作最常用的方法是信号屏蔽。信号屏蔽要用到下面的几个函数。sigemptyset,sigfillset,sigaddset,sigdelset,sigismember,sigprocmask。下面对他们分别进行讲解。 8.名称

2014-01-13 11:33:49 707

原创 Linux 内存映射

mmap()将一个文件或者是其他对象映射到内存区 函数说明:#includevoid *mmap(void *start, size_t len, int prot, int flags, int fd, off_t offsize)已PAGE_SIZE的整数倍进行映射,参数解读start 指向预映射的地址的起始地址,通常该参数的值为NULL,由系统来决定,成功后返回该地址

2014-01-09 19:53:30 470

原创 Linux中编译、安装nginx

1、首先准备好nginx,我的版本是0.8.54. 我是在windows平台下 下载好然后通过ftp上传到 Linux 系统中首先 解压 tar vxzf nginx-0.8.54.tar.gz。然后进行程序安装前的配置。编译参数配置如下--prefix= #Nginx安装路径。如果没有指定,默认为 /usr/local/nginx--sbin-path= #Nginx可执行文件安

2014-01-07 17:23:29 497

原创 SPprocthreadpool 线程池源码阅读

/* * Copyright 2007-2008 Stephen Liu * For license terms, see the file COPYING along with this library. */#ifndef __spprocthread_hpp__#define __spprocthread_hpp__#include typedef s

2013-08-14 20:38:57 651

原创 lua学习笔记3(lua中的文件相关的函数的应用)

lua系统自身提供了一些函数进行文件类的操作,打开,关闭,读取等。io.open(path,mode)以指定方式打开一个文件,返回一个类似文件描述符类的数据mode :r - 读取模式w - 写入模式(覆盖现有内容)a - 附加模式(附加在现有内容之后)b - 二进制模式r+ - 读取更新模式(现有数据保留)w+ - 写入更新模式(现有数据擦

2013-07-31 22:15:32 553

原创 调用赋值运算符 和 拷贝构造函数

这个地方老是搞模糊,今天特记下来。1、如果在对象声明的时候 eg:Cstring a = b;此时是调用拷贝构造函数,因为这时对象a还没有创建,需要调用构造函数来创建对象。拷贝构造函数还是构造函数的一种,只不过其传递的参数是对象本身类型的数据2、对象已经创建完毕,eg Cstring a; a = b;这时调用的是赋值运算符,其实C++ 都提供了默认的拷贝构造函数和赋值运算

2013-07-31 08:57:40 641

转载 string类的实现

#include#include#include#includeusing namespace std;class CMyString{ friend std::ostream& operator<<( std::ostream& os, const CMyString& str); private: char* m_

2013-07-31 08:47:36 473

原创 lua学习笔记2(require 和程序加载流程)

lua require模块的解析require 就是按照一个预先定义好的顺序和路径进行搜索和匹配,有点类似windows的loadlibrary。只不过其不止搜索xxx.lua 同时还包括xxx.so 、xxx.a 和xxx.dll 等文件。根据不同的文件类型 其内部进行不同的加载 其源代码就在loadlib.c中,函数名为ll_require,代码如下:lua

2013-07-30 11:06:39 4737 4

原创 理解lua的dofile 和 require

lua脚本的具体优势和简单的使用方法 此处暂时不说在程序中 需要用到第三方的lua开源库,这时希望能够把库编译到lua的解析器里面。于是需要查看下lua的一些源码。

2013-07-29 20:35:27 319

原创 数据库插入时出现 unable to extend table UPP.T_USI_PAYACC by 128 in tablespace TS_U_DEFAULT

在测试oracle数据库时出现错误ORA-01653: unable to extend table UPP.T_USI_PAYACC by 128 in tablespace TS_U_DEFAULT意思是在表空间TS_U_DEFAULT上不能扩展表T_USI_PAYACC的大小以128个字节为单位.造成此错误的原因有两个1.一种是空间确实不够用了,已经达到了自动扩展的上限2.一

2013-07-09 16:53:57 1018

原创 数据库事务、游标

1、事务是一系列的数据库操作,是数据库应用程序的基本逻辑单元,是工作的逻辑单元。事务管理将一组SQL语句作为一个单元实体对待,它确保事务中的所有语句要么执行成功,要么完全不执行。事务是进行原子性的操作。务命令包括有关键字如BEGIN、COMMIT和ROLLBACK。如果事务在提交前由于某种原因必须被取消,则所有已经完成的语句必须被取消。可以在COMMIT事务命令前通过ROLLBACK事务命令取

2013-06-24 09:51:35 817

原创 C++ 智能指针的使用

在程序过程中有时需要new 出来一个指向对象的指针,当时这样就会造成一个问题就是有的指针没有进行删除操作,而且有时对指针进行copy,导致多个指针指向同一个对象,对其中的一个删除的时候就会造成别的指针成为悬垂指针,再次删除就会造成程序的崩溃。在这个时候能够很多的解决问题的方法就是使用智能指针。指针指针本质是个模板类,使用指针作为参数来生成一个对象,使用其来管理指针的回收,指针的引用计数等问题,

2013-04-26 12:21:36 512

转载 oracle 触发器的种类和触发事件,DML触发器,DDL事件触发器,替代触发器,查看触发器,

触发器的种类和触发事件 触发器必须由事件才能触发。触发器的触发事件分可为3类,分别是DML事件、DDL事件和数据库事件。 每类事件包含若干个事件,如下所示。数据库的事件是具体的,在创建触发器时要指明触发的事件。 种  类 关 键 字 含    义 Sql代码  DML事件(3种)   INSERT  在表或视图中插入数据时触发      UPDATE

2013-04-25 15:30:27 766

转载 inotify -- Linux 2.6 内核中的文件系统变化通知机制

https://www.ibm.com/developerworks/cn/linux/l-inotifynew/程序实现MonitorDir.cpp#include #include #include #include #include #include //_syscall0(int, inotify_init)//_syscall3(int, inotify_add

2013-04-19 09:26:05 449

转载 僵尸进程

一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁, 而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit,它的作用是 使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)僵尸进程的危害由于子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束. 那么会不会因为父进程太忙来不及wai

2013-04-17 19:37:54 426

转载 Linux信号量

我们可以使用kill -l查看所有的信号量解释,但是没有看到SIGNAL 0的解释。[root@testdb~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS SIGFPE 9) SIGKILL

2013-04-17 17:47:08 594

原创 linux编写带有导出函数的so文件

extern "C" int add(int a, int b){ return a+b;}extern "C" int sub(int a, int b){ return a-b;}编译参数:MakefileTARGET = libtest.soCOMPILE = -fPICCOMPILE += -cLINK = -sharedCC = g++

2013-04-12 17:24:42 2328

转载 C++ 关键字typeid

转载网址:http://www.cppblog.com/smagle/archive/2010/05/14/115286.aspx在揭开typeid神秘面纱之前,我们先来了解一下RTTI(Run-Time Type Identification,运行时类型识别),它使程序能够获取由基指针或引用所指向的对象的实际派生类型,即允许“用指向基类的指针或引用来操作对象”的程序能够获取到“这些指针或

2013-04-12 11:27:20 409

转载 Linux平台上用C++实现多线程互斥锁

在上篇用C++实现了Win32平台上的多线程互斥锁,这次写个Linux平台上的,同样参考了开源项目C++ Sockets的代码,在此对这些给开源项目做出贡献的斗士们表示感谢!下边分别是互斥锁类和测试代码,已经在Fedora 13虚拟机上测试通过。Lock.h#ifndef _Lock_H#define _Lock_H#include //锁接口类class IL

2013-03-30 23:36:14 471

转载 linux install 命令

install 1.作用 install命令的作用是安装或升级软件或备份数据,它的使用权限是所有用户。 2.格式 (1)install [选项]... 来源 目的地 (2)install [选项]... 来源... 目录 (3)install -d [选项]... 目录... 在前两种格式中,会将复制至或将多个文件复制至已存在的,同时设定权限模式及所有者/所属组。在第三

2013-03-24 09:55:56 615

转载 socket编程中select的使用

Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程式,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程式(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,假如事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就能够完成非阻塞(所谓非

2013-03-22 15:26:04 522

转载 C ++ 函数后面加throw()的作用

Following declaration gives a message to the user of your class: my method doesn't throw any exception. Don't bother to put a try/catch block around itwhen you use it.void A::foo() throw();

2013-03-21 19:26:26 579

原创 source insight完全卸载

由于不知名原因 source insight崩溃了,使用自带的卸载,完成之后重新安装软件注册还是出问题。在网上搜索资料发现就是删除注册表中的内容。由于列出的删除项目不完全,导致还是出问题。最后删除所有的在注册表中带有source insight的注册表项,然后删除document中的文件夹 这样就能够完全删除了。步骤1、先卸载软件2、在开始处输入regedit 进入注册表,在注

2013-03-20 09:08:34 6289 1

转载 Unix下的硬连接和软连接文件

http://blog.csdn.net/jcwkyl/article/details/5144260发现创建的符号链接删除不了,搜索才知道删除符号连接时文件名后面不能后缀一个/。比如:[whb@jcwkyl test]$ ln -s ~whb[whb@jcwkyl test]$ lswhb[whb@jcwkyl test]$ rm whb/rm: cannot remov

2013-03-19 11:07:56 653

转载 旋转字符串问题

1、定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串 abcdef 左旋转 2 位得到字符串 cdefab。请实现字符串左旋转的函数,要求长度为 n 的字符串操作的时间复杂度为O(n),空间复杂度为 O(1)。2、思路假设原数组序列为 abcd1234,要求变换成的数组序列为 1234abcd,即循环右移了 4 位。比较之后,不难看出,其中有两段的顺序是不变的

2013-03-07 10:05:22 565

转载 旋转字符串问题

1、定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串 abcdef 左旋转 2 位得到字符串 cdefab。请实现字符串左旋转的函数,要求长度为 n 的字符串操作的时间复杂度为O(n),空间复杂度为 O(1)。2、思路假设原数组序列为 abcd1234,要求变换成的数组序列为 1234abcd,即循环右移了 4 位。比较之后,不难看出,其中有两段的顺序是不变的

2013-03-07 09:58:32 176

原创 C++ 实现内存池

内存池(Memory Pool)是一种内存分配方式。通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。内存池则是在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。这样做

2013-03-01 22:19:32 375

转载 C++的深拷贝与浅拷贝

对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。#include using namespace std;class CExample {private: int a;public: CExample(int b)

2013-02-27 20:08:26 468

程序员面试宝典

第一部分:求职过程 第二部分:C/C++程序设计 第三部分:数据结构和设计模式 第四部分:操作系统、数据库和网络 第五部分:综合面试题

2012-11-17

python v2.7.3帮助文档

python v2.7.3帮助文档,相比于2.6版本的帮助文档有很多例子可供参考。

2012-11-08

贪吃蛇C++代码

贪吃蛇C++代码,本人亲测可以运行,共享出来供大家学习

2012-04-28

TCP-IP协议详解

TCP-IP协议详解 TCP/UDP、DNS 、Socket 套接字详解,对于基础通信知识有极大的作用

2012-04-28

linux操作指导书籍

linux基本shell命令行说明以及用法讲解。linux自学必备书籍,学习linux的重要手册

2012-04-26

空空如也

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

TA关注的人

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