志存高远

专注于C/C++

排序:
默认
按更新时间
按访问量

Linux网络编程--服务端判断客户端断开的经验方法

法一: 当recv()返回值小于等于0时,socket连接断开。但是还需要判断 errno是否等于 EINTR,如果errno == EINTR 则说明recv函数是由于程序接收到信号后返回的,socket连接还是正常的,不应close掉socket连接。   法二:   struct tcp_i...

2016-03-07 15:41:36

阅读数:4977

评论数:4

Linux网络编程--IO模型基础

IO的方式有阻塞IO、非阻塞IO模型、IO复用、信号驱动、异步IO等,本文以UDP为例大概介绍这几种IO模型的基础知识和原理。 1.阻塞IO 阻塞IO是最通用的IO类型,使用这种模型进行数据接收的时候,在数据没有到之前程序会一直等待。 2.非阻塞IO模型 3.IO复用 4.信...

2015-09-10 16:33:11

阅读数:1210

评论数:0

数据结构与算法-----总结篇

一、数据结构 程序设计=数据结构+算法 1.逻辑结构 1)集合:元素之间没有联系。 2)线性结构:元素之间存在前后顺序。 3)树形结构:元素之间存在一对多的父子关系。 4)图状结构:元素之间存在多对多的映射关系。 2.物理结构 1)顺序结构:用连续的空间存放数据元素。 优点:便于随机访问。 缺点...

2015-06-17 17:09:30

阅读数:2621

评论数:1

软件设计之总体设计

软件的需求分析阶段知道系统要“做什么”,而软件设计阶段我们明白的是“怎么做”。软件的设计分为:总体设计&&详细设计设计基本原理:总体设计的任务和过程总体设计分为:面向数据,面向功能,面向对象的分析设计原则:独立性,规模,深,宽,入,出。作用域。接口。...

2018-03-25 10:22:52

阅读数:634

评论数:0

Java-IO[列出目录中指定文件类型的所有文件(包含子目录)]

列出目录中指定文件类型的所有文件可以选择是否列出子目录中文件,也可以指定多种扩展名设计步骤: 1.方法listFile (File dir ,FileFilter ff,boolean recursive )方法,把dir目录中   经过ff过滤的文件添加到List的对象中存储 ,使用recurs...

2018-03-19 20:34:06

阅读数:102

评论数:0

Java-IO[实现对目录的遍历以及删除(包含子目录)]

package kevin.io; import java.io.File; public class DeleteDirectory { public static void main(String[] args) { DeleteDirectory delDir=new Delet...

2018-03-18 17:38:37

阅读数:61

评论数:0

Java-Xml【DOM4J 实现对XML文档的增、删、改、查】

虽说是介绍基本操作,但是对XML的使用最多的就是增删改查,本文内容也是实际工作中常用到的方法。下面是待解析的Xml文件内容:<?xml version="1.0" encoding="utf-8"?&am...

2018-03-16 18:11:50

阅读数:81

评论数:0

UltraEdit正则表达式(UltraEdit Syntax)

以下是常用的UE 技巧1)删除空行: 替换 %[ ^t]++^p 为 空串 2)删除行尾空格: 替换 [ ^t]+$ 为 空串 3)删除行首空格: 替换 %[ ^t]+ 为 空串4)每行设置为固定的4个空格开头: 替换 %[ ^t]++^([~ ^t^p]^) 为 " ^1&am...

2018-03-10 22:24:56

阅读数:109

评论数:0

Java语言-集合和Map知识梳理

1.1 List、Map、Set三个接口存储元素时各有什么特点参考答案:1)List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。2)Set是一种不包含重复的元素的...

2018-03-05 22:40:30

阅读数:54

评论数:0

Java语言-Map的遍历

由于示例比较简单,话不多少,看代码:import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.Map.Entry; pu...

2018-03-05 22:34:58

阅读数:49

评论数:0

java语言多线程通信--等待唤醒机制

/* 等待/唤醒机制。  涉及的方法: 1,wait(): 让线程处于冻结状态,被wait的线程会被存储到线程池中。 2,notify():唤醒线程池中一个线程(任意). 3,notifyAll():唤醒线程池中的所有线程。 这些方法都必须定义在同步中。 因为这些方法是用于操...

2016-11-30 22:18:23

阅读数:386

评论数:0

java语言异常的使用方法和处理经验

异常处理的捕捉形式: 这是可以对异常进行针对性处理的方式。 具体格式是: try { //需要被检测异常的代码。 } catch(异常类 变量)//该变量用于接收发生的异常对象 { //处理异常的代码。 } finally { //一定会被执行的代码。 } 异...

2016-11-03 21:53:52

阅读数:385

评论数:0

java语言中抽象类的介绍和应用

抽象类:抽象:笼统,模糊,看不懂!不具体。特点:1,方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰。     抽象方法必须定义在抽象类中。该类必须也被abstract修饰。2,抽象类不可以被实例化。为什么?因为调用抽象方法没意义。3,抽象类必须有其子类覆盖了所有的抽象方法后...

2016-10-27 23:57:07

阅读数:516

评论数:0

单例设计模式-饿汉式和懒汉式

设计模式:对问题行之有效的解决方式。其实它是一种思想。 1,单例设计模式。 解决的问题:就是可以保证一个类在内存中的对象唯一性。 必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性。 如何保证对象唯一性呢? 1,不允许其他程序用new创建该类对象。 2,...

2016-10-26 22:25:43

阅读数:306

评论数:0

java语言数组工具类的建立和静态的使用

/** 建立一个用于操作数组的工具类,其中包含着常见的对数组操作的函数如:最值,排序等 。 */ public class ArrayTool { private ArrayTool(){} //该类中的方法都是静态的,所以该类是不需要的创建对象的。为了保证不让其他成创建该类对象 //可以...

2016-10-26 21:20:21

阅读数:682

评论数:0

使用java语言实现进制之间的相互转换

使用java语言实现进制之间的相互转换思想:16进制占4位二进制位 8进制占3位二进制位 二进制占1位二进制位 首先取二进制数最后4位 然后向右移位使用>>>符号是因为防止负数的原因。class Demo { public static void main(S...

2016-10-24 20:40:36

阅读数:2786

评论数:2

Linux系统tput命令用法实例详解

tput简介: 用户可以使用shell的tput命令创建交互性的、专业性强的屏幕输出,如移动或更改光标、更改文本属性,以及清除终端屏幕的特定区域。 系统上需要一个彩色监视器和tput命令。tput使用文件/etc/terminfo或/etc/termcap,这样就可以在脚本中使用终端支持的大部分命...

2016-09-19 22:22:22

阅读数:3381

评论数:0

字节存储排序:大端和小端的判别及转换

当前的存储器,多以byte为访问的最小单元,当一个逻辑上的地址必须分割为物理上的若干单元时就存在了先放谁后放谁的问题,于是端(endian)的问题应运而生了,对于不同的存储方法,就有大端(big-endian)和小端(little- endian)两个描述。 其实大端也叫高尾端,小端也叫低尾端;这...

2016-09-14 22:43:54

阅读数:4429

评论数:1

db2 修改dbm cfg的时候报SQL5001N错误分析以解决方法

本人今天使用update更新dbm cfg时候出现了SQL5001N错误,那么就简单的分析一下并给出解决方法: 操作命令:db2 update dbm cfg using DFT_MON_STMT on 报错信息:SQL5001N  "KEVIN" does not have ...

2016-09-06 22:03:37

阅读数:1086

评论数:0

Linux系统利用脚本删除空行或者空格的方法

Linux系统利用脚本删除空行的4种方法1)用tr命令 cat 文件名 |tr -s ‘\n’2)用sed命令 cat 文件名 |sed ‘/^$/d’ 3)用awk命令 cat 文件名 |awk ‘{if(0!=””)print}’  cat 文件名 |awk ‘{if(leng...

2016-08-25 21:13:54

阅读数:5926

评论数:0

Unix/Linux系统使用命令wall,write,mesg命令实现快速对话

最近工作比较忙,今天抽空写篇博客,这也是最近工作中频繁使用的命令,当然这是由于工作中的环境限制导致的,一般很少使用这些命令,当然也是很有意思的命令喽 本篇博客就介绍一下比较有意思的系统终端命令: 1、wall wall命令是对所有在线的用户进行广播的。 # wall ...

2016-08-19 21:27:30

阅读数:3082

评论数:0

linux中对errno是EINTR的处理

慢系统调用(slow system call):此术语适用于那些可能永远阻塞的系统调用。永远阻塞的系统调用是指调用有可能永远无法返回,多数网络支持函数都属于这一类。如:若没有客户连接到服务器上,那么服务器的accept调用就没有返回的保证。 EINTR错误的产生:当阻塞于某个慢系统调用的...

2016-05-18 15:53:24

阅读数:4037

评论数:0

Linux系统使用ps命令查看进程所占cpu和内存比例

linux ps命令,查看进程cpu和内存占用率排序 使用以下命令查看: ps -aux | sort -k4,4n ps auxw --sort=rss ps auxw --sort=%cpu linux 下的ps命令 %CPU 进程的cpu占用率 %MEM 进程的内存占用率 V...

2016-05-17 09:32:14

阅读数:6194

评论数:0

多进程并发编程----基于高级的预先创建进程池(accept使用线程上锁)的模型

本博文介绍如何使用线程对accept进程加锁保护。 使用线程对accept加锁,不仅适用于同一进程内各线程之间的上锁,同样适用于不同进程之间的上锁。 实现要点: 1 互斥变量必须存放在所有进程共享的内存区域内 2 告知线程函数库这是不同进程之间共享的互斥锁 服务端程序的代码如下: #inclu...

2016-04-25 17:56:06

阅读数:949

评论数:0

多进程并发编程----基于高级的预先创建进程池(accept使用文件上锁)的模型

本篇博文讲解如何使用fcntl文件上锁的方式对accept进行保护。 如果多个进程在引用同一个监听套接字的描述符上调用accept,对于不同的内核accept不一定都是原子操作。Berkeley的内核支持这种模型,而system V就会出现问题,那么我们的解决方法之一就是本博文讲解的使用文件上锁保...

2016-04-25 17:43:45

阅读数:390

评论数:0

多进程并发编程----基于高级的动态创建进程池的模型

此篇博文主要讲解如何动态创建进程的方法,此方法模型如下: main{ ps=socket(); bind(); listen(); while(1){ cs=accept(); if(cs){ pid=fork(); if(pid==0){//...

2016-04-21 18:01:03

阅读数:449

评论数:0

多进程并发编程----基于高级的预先创建进程池(accept不上锁)的模型

此篇博文先介绍最简单的服务器并发模型,此模型的大概框架如下: main{ socket(); bind(); listen(); for(i=0;i pid=fork(); if(pid==0)//子进程 do_child(); } waitpid(); close(fd); } do_child...

2016-04-21 16:45:09

阅读数:636

评论数:0

多进程并发编程----进程间传递文件描述符案例

#include #include #include #include #include #include #include #include #include #include int send_fd(int fd, void *ptr, size_t nbytes, int sendfd) ...

2016-04-15 17:34:48

阅读数:957

评论数:0

多进程并发编程----进程间传递文件描述符基础~socketpair函数简介

socketpair函数概要如下: #include #include int socketpair(int domain, int type, int protocol, int sv[2]); sys/types.h文件需要用来定义一些C宏常量。sys/socket.h文件必须包含进来定义...

2016-04-15 17:13:37

阅读数:1040

评论数:0

多进程并发编程----进程间传递文件描述符基础~发送接收附属数据结构体介绍

附属信息可以包括0,1,或是更多的单独附属数据对象。在每一个对象之前都有一个struct cmsghdr结构。头部之后是填充字节,然后是对象本身。最后,附属数据对象之后,下一个cmsghdr之前也许要有更多的填充字节。在这一章,我们将 要关注的附属数据对象是文件描述符与证书结构。 下图显示了...

2016-04-15 17:03:30

阅读数:888

评论数:0

多进程并发编程----进程间传递文件描述符基础~发送接收附属数据函数介绍

如果fork进程之后,子进程如果想要传递描述给父进程一般使用socketpair函数。 此篇文章不介绍socketpair函数,二是介绍sendmsg和recvmsg函数,这两个函数隐藏的机构体有针对socket描述符的选项。 具体如下: 这两个函数为程序提供了一些其他的套接口I/O接口所不...

2016-04-15 16:59:34

阅读数:785

评论数:0

Linux网络编程--select,poll和epoll的区别

在Linux Socket服务器短编程时,为了处理大量客户的连接请求,需要使用非阻塞I/O和复用,select、poll和epoll是Linux API提供的I/O复用方式,自从Linux 2.6中加入了epoll之后,在高性能服务器领域得到广泛的应用,现在比较出名的nginx就是使用epoll来...

2016-04-14 14:53:49

阅读数:696

评论数:0

db2 export与 import中的 codepage 转换

制造不同 CODEPAGE 数据的方式 制造不同 codepage 数据的方法有很多种。以下列出 4 种: 1. 使用 db2 export。DB2 本身 EXPORT 支持导出各种不同 codepage 的 DEL 格式的文件,例如导出 codepage 为 819 和 1386 的文件,如...

2016-04-13 18:08:34

阅读数:5728

评论数:1

Linux网络编程--recv函数返回值详解

recv函数 int recv( SOCKET s, char FAR *buf, int len, int flags); 不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据。 该函数的第一个参数指定接收端套接字描述符;  第二个参数指明一个缓冲区,该缓冲区用来存放...

2016-04-13 14:37:50

阅读数:8805

评论数:1

在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)

fork  ( /directory/script.sh) :如果shell中包含执行命令,那么子命令并不影响父级的命令,在子命令执行完后再执行父级命令。子级的环境变量不会影响到父级。 fork是最普通的, 就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚...

2016-04-11 10:07:21

阅读数:504

评论数:0

使用db2获取某一行或者从N到M行结果

select *from (select wuid,ROW_NUMBER() OVER(order by workseq asc) as a from WORKPROCESS where muid='702711' ) where a=1 ;

2016-04-08 16:41:36

阅读数:2238

评论数:0

linux下打印带有颜色的字体

文本终端的颜色可以使用“ANSI非常规字符序列”来生成。举例:   echo -e "\033[44;37;5m ME \033[0m COOL" 以上命令设置背景成为蓝色,前景白色,闪烁光标,输出字符“ME”,然后重新设置屏幕到缺省设置,输出字符 “COOL”。“...

2016-04-08 09:32:24

阅读数:1441

评论数:0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,I...

2016-04-01 13:30:36

阅读数:299

评论数:0

Linux网络编程--使用epoll,共享内存技术实现高性能的聊天室程序

本篇博文主要介绍使用epoll和多进程的共享内存技术实现高性能的聊天室的服务器程序。#include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <asser...

2016-03-28 10:25:49

阅读数:1696

评论数:0

Linux网络编程--使用epoll模型同时处理tcp和udp服务

在实际工作中,服务器需要同时监听和处理tcp和udp的套接字,同时监听N多的端口。根据bind系统调用来讲,一个socket只能监听一个端口,因此要创建多个socket并绑定到各个端口上。当然同一个端口可以同时绑定tcp和udp的socket,但是要创建两个socket,一个是tcp的一个是udp...

2016-03-22 14:43:47

阅读数:2658

评论数:2

Linux网络编程--epoll模型ET触发模式之epolloneshot事件

epoll模型的ET模式一般来说只触发一次,然而在并发程序中有特殊情况的存在,譬如当epoll_wait已经检测到socket描述符fd1,并通知应用程序处理fd1的数据,那么处理过程中该fd1又有新的数据可读,会唤醒其他线程对fd1进行操作,那么就出现了两个工作线程同时处理fd1的情况,这当然不...

2016-03-21 15:24:22

阅读数:1234

评论数:0

Linux网络编程--epoll模型之LT触发模式和ET触发模式

epoll对文件描述符有两种操作模式--LT(level trigger电平模式)和ET(edge trigger边缘模式) 简单来讲,LT是epoll的默认操作模式,当epoll_wait函数检测到有事件发生并将通知应用程序,而应用程序不一定必须立即进行处理,这样epoll_wait函数再次检...

2016-03-21 14:38:46

阅读数:2083

评论数:0

Linux网络编程--sendfile零拷贝高效率发送文件

本博文介绍使用sendfile函数进行零拷贝发送文件,实现高效数据传输,并对其进行验证。 那么什么是sendfile呢? linux系统使用man sendfile,查看sendfile原型如下: #include        ssize_t sendfile(int out_fd, int ...

2016-03-11 15:24:11

阅读数:9356

评论数:1

Linux网络编程--定时器之时间堆

相比较时间轮,时间堆的效率更高,主要利用最小堆的思想实现。 具体实现过程如下: #ifndef intIME_HEAP #define intIME_HEAP #include #include #include using std::exception; #define BUFFE...

2016-03-10 15:40:58

阅读数:826

评论数:0

Linux网络编程--定时器之时间轮

由于基于升序定时器链表的添加定时器效率偏低,所以本博文介绍一种高效的定时器---时间轮; 时间轮:包含时间间隔si,时间轮槽数N,运行一周所用的时间是si*N。每一个槽就是一个无序的定时器链表,并且拥有统一的特征,定时时间相差N*si整数倍。 时间轮的优势在于采用哈希表的思想,将定时器散列在不...

2016-03-10 15:29:57

阅读数:989

评论数:0

Linux网络编程--定时器的学习和使用

linux网络编程需要处理的重要事件之一--定时事件,对于服务器而言,管理着众多的客户端连接,高效稳定的管理这些客户端,定时事件是必不可少的,也对服务器的性能有着至关重要的作用。本博文先介绍简单的定时事件,以便于下一篇介绍高性能定时器做铺垫。 1.使用setsockopt设置socket选项SO_...

2016-03-10 14:25:52

阅读数:1441

评论数:0

libevent---主要函数

event_int(初始化libevent实例) struct event_base * event_init(void) 初始化事件处理框架实例,内部调用event_base_new。 event_base_new的主要逻辑: 代码  1 struct event_base ...

2016-03-08 15:10:16

阅读数:1114

评论数:0

libevent---核心event和event_base

结构体event和event_base是libevent的两个核心数据结构,前者代表一个事件对象,后者代表整个事件处理框架。 1.event事件对象 //event.h struct event { TAILQ_ENTRY (event) ev_next; //已注册事件...

2016-03-08 14:58:34

阅读数:542

评论数:0

libevent---源代码结构

Libevent 的源代码虽然都在一层文件夹下面,但是其代码分类还是相当清晰的,主要可分为头文件、内部使用的头文件、辅助功能函数、日志、libevent 框架、对系统 I/O 多路复用机制的封装、信号管理、定时事件管理、缓冲区管理、基本数据结构和基于 libevent的两个实用库等几个部分,有些部...

2016-03-08 14:49:30

阅读数:567

评论数:0

libevent入门---定时器程序

1、入门 1.1、概述 Libevent是一个用于开发可扩展性网络服务器的基于事件驱动(event-driven)模型的网络库。Libevent有几个显著的亮点:  (1)事件驱动(event-driven),高性能; (2)轻量级,专注于网络,不如 ACE 那么臃肿庞大;  (3)...

2016-03-08 14:35:47

阅读数:1941

评论数:0

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