- 博客(190)
- 资源 (6)
- 收藏
- 关注
原创 Linux网络编程--服务端判断客户端断开的经验方法
法一:当recv()返回值小于等于0时,socket连接断开。但是还需要判断 errno是否等于 EINTR,如果errno == EINTR 则说明recv函数是由于程序接收到信号后返回的,socket连接还是正常的,不应close掉socket连接。 法二: struct tcp_info info; int len=sizeof(info); getsock
2016-03-07 15:41:36 6646 4
原创 Linux网络编程--IO模型基础
IO的方式有阻塞IO、非阻塞IO模型、IO复用、信号驱动、异步IO等,本文以UDP为例大概介绍这几种IO模型的基础知识和原理。 1.阻塞IO 阻塞IO是最通用的IO类型,使用这种模型进行数据接收的时候,在数据没有到之前程序会一直等待。 2.非阻塞IO模型 3.IO复用 4.信号驱动IO模型 5.异步IO模型
2015-09-10 16:33:11 1906
原创 数据结构与算法-----总结篇
一、数据结构程序设计=数据结构+算法1.逻辑结构1)集合:元素之间没有联系。2)线性结构:元素之间存在前后顺序。3)树形结构:元素之间存在一对多的父子关系。4)图状结构:元素之间存在多对多的映射关系。2.物理结构1)顺序结构:用连续的空间存放数据元素。优点:便于随机访问。缺点:空间利用率低,插入删除不方便。2)链式结构:用不连续的空间存放数据元素,每
2015-06-17 17:09:30 3827 1
转载 软件设计之总体设计
软件的需求分析阶段知道系统要“做什么”,而软件设计阶段我们明白的是“怎么做”。软件的设计分为:总体设计&&详细设计设计基本原理:总体设计的任务和过程总体设计分为:面向数据,面向功能,面向对象的分析设计原则:独立性,规模,深,宽,入,出。作用域。接口。单入单出。预测(黑盒子)总体设计图形工具1.层次图:描述层次结构。2.HIPO图:在层次图的基础上,把图中除了顶层的方框外都加上编号*...
2018-03-25 10:22:52 33935 1
原创 Java-IO[列出目录中指定文件类型的所有文件(包含子目录)]
列出目录中指定文件类型的所有文件可以选择是否列出子目录中文件,也可以指定多种扩展名设计步骤: 1.方法listFile (File dir ,FileFilter ff,boolean recursive )方法,把dir目录中 经过ff过滤的文件添加到List的对象中存储 ,使用recursive判断是否过滤子 目录中的文件添加到List 的对象中 2.列出指定 目录下指定扩展名的所有文...
2018-03-19 20:34:06 4057
原创 Java-IO[实现对目录的遍历以及删除(包含子目录)]
package kevin.io;import java.io.File;public class DeleteDirectory { public static void main(String[] args) { DeleteDirectory delDir=new DeleteDirectory(); try { delDir.listDirectory(new F...
2018-03-18 17:38:37 896
原创 Java-Xml【DOM4J 实现对XML文档的增、删、改、查】
虽说是介绍基本操作,但是对XML的使用最多的就是增删改查,本文内容也是实际工作中常用到的方法。下面是待解析的Xml文件内容:<?xml version="1.0" encoding="utf-8"?><students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.itcas...
2018-03-16 18:11:50 512
原创 UltraEdit正则表达式(UltraEdit Syntax)
以下是常用的UE 技巧1)删除空行: 替换 %[ ^t]++^p 为 空串 2)删除行尾空格: 替换 [ ^t]+$ 为 空串 3)删除行首空格: 替换 %[ ^t]+ 为 空串4)每行设置为固定的4个空格开头: 替换 %[ ^t]++^([~ ^t^p]^) 为 " ^1" 5)每段设置为固定的4个空格开头: 替换 %[ ^t]+ 为 " " (如果一行是以空格开始的,则视之为一段的开始行) 6...
2018-03-10 22:24:56 4927
原创 Java语言-集合和Map知识梳理
1.1 List、Map、Set三个接口存储元素时各有什么特点参考答案:1)List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。2)Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多...
2018-03-05 22:40:30 404
原创 Java语言-Map的遍历
由于示例比较简单,话不多少,看代码:import java.util.Collection;import java.util.HashMap;import java.util.Map;import java.util.Set;import java.util.Map.Entry;public class MapDemo { /** * @see Map的遍历,包含key的遍历...
2018-03-05 22:34:58 327
原创 java语言多线程通信--等待唤醒机制
/*等待/唤醒机制。 涉及的方法:1,wait(): 让线程处于冻结状态,被wait的线程会被存储到线程池中。2,notify():唤醒线程池中一个线程(任意).3,notifyAll():唤醒线程池中的所有线程。这些方法都必须定义在同步中。因为这些方法是用于操作线程状态的方法。必须要明确到底操作的是哪个锁上的线程。为什么操作线程的方法wait no
2016-11-30 22:18:23 763
原创 java语言异常的使用方法和处理经验
异常处理的捕捉形式:这是可以对异常进行针对性处理的方式。具体格式是:try{//需要被检测异常的代码。}catch(异常类 变量)//该变量用于接收发生的异常对象{//处理异常的代码。}finally{//一定会被执行的代码。}异常处理的原则:1,函数内容如果抛出需要检测的异常,那么函数上必须要声明。否则必须在函数内用tr
2016-11-03 21:53:52 673
原创 java语言中抽象类的介绍和应用
抽象类:抽象:笼统,模糊,看不懂!不具体。特点:1,方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰。 抽象方法必须定义在抽象类中。该类必须也被abstract修饰。2,抽象类不可以被实例化。为什么?因为调用抽象方法没意义。3,抽象类必须有其子类覆盖了所有的抽象方法后,该子类才可以实例化。 否则,这个子类还是抽象类。思考:1,抽象类中有构造函数吗? 有...
2016-10-27 23:57:07 1085
原创 单例设计模式-饿汉式和懒汉式
设计模式:对问题行之有效的解决方式。其实它是一种思想。1,单例设计模式。解决的问题:就是可以保证一个类在内存中的对象唯一性。必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性。如何保证对象唯一性呢?1,不允许其他程序用new创建该类对象。2,在该类创建一个本类实例。3,对外提供一个方法让其他程序可以获取该对象。步骤:1,私有化
2016-10-26 22:25:43 545
原创 java语言数组工具类的建立和静态的使用
/**建立一个用于操作数组的工具类,其中包含着常见的对数组操作的函数如:最值,排序等 。*/public class ArrayTool{ private ArrayTool(){} //该类中的方法都是静态的,所以该类是不需要的创建对象的。为了保证不让其他成创建该类对象 //可以将构造函数私有化。 /** 获取整型数组的最大值。 @param arr 接收一个元素为int
2016-10-26 21:20:21 1234
原创 使用java语言实现进制之间的相互转换
使用java语言实现进制之间的相互转换思想:16进制占4位二进制位 8进制占3位二进制位 二进制占1位二进制位 首先取二进制数最后4位 然后向右移位使用>>>符号是因为防止负数的原因。class Demo { public static void main(String[] args) {// toHex(26); toBinary(-6);// toOctal
2016-10-24 20:40:36 4211 2
原创 Linux系统tput命令用法实例详解
tput简介:用户可以使用shell的tput命令创建交互性的、专业性强的屏幕输出,如移动或更改光标、更改文本属性,以及清除终端屏幕的特定区域。系统上需要一个彩色监视器和tput命令。tput使用文件/etc/terminfo或/etc/termcap,这样就可以在脚本中使用终端支持的大部分命令了。在使用tput前需要使用tput命令初始化终端:$ tput inittput产
2016-09-19 22:22:22 12448
原创 字节存储排序:大端和小端的判别及转换
当前的存储器,多以byte为访问的最小单元,当一个逻辑上的地址必须分割为物理上的若干单元时就存在了先放谁后放谁的问题,于是端(endian)的问题应运而生了,对于不同的存储方法,就有大端(big-endian)和小端(little- endian)两个描述。其实大端也叫高尾端,小端也叫低尾端;这样记的话比较容易理解;字节排序按分为大端和小端,概念如下大端(big endian):低地址
2016-09-14 22:43:54 9617 1
原创 db2 修改dbm cfg的时候报SQL5001N错误分析以解决方法
本人今天使用update更新dbm cfg时候出现了SQL5001N错误,那么就简单的分析一下并给出解决方法:操作命令:db2 update dbm cfg using DFT_MON_STMT on报错信息:SQL5001N "KEVIN" does not have the authority to change the database manager configuration
2016-09-06 22:03:37 3079
原创 Linux系统利用脚本删除空行或者空格的方法
Linux系统利用脚本删除空行的4种方法1)用tr命令 cat 文件名 |tr -s ‘\n’2)用sed命令 cat 文件名 |sed ‘/^$/d’ 3)用awk命令 cat 文件名 |awk ‘{if(0!=””)print}’ cat 文件名 |awk ‘{if(length !=0) print0!=””)print}’ cat 文件名 |awk ‘{if(lengt
2016-08-25 21:13:54 11284
原创 Unix/Linux系统使用命令wall,write,mesg命令实现快速对话
最近工作比较忙,今天抽空写篇博客,这也是最近工作中频繁使用的命令,当然这是由于工作中的环境限制导致的,一般很少使用这些命令,当然也是很有意思的命令喽本篇博客就介绍一下比较有意思的系统终端命令:1、wallwall命令是对所有在线的用户进行广播的。# wall Hello!I am Nick. 这时就可以用wall命令将它,发给所有登录该主
2016-08-19 21:27:30 5755
原创 linux中对errno是EINTR的处理
慢系统调用(slow system call):此术语适用于那些可能永远阻塞的系统调用。永远阻塞的系统调用是指调用有可能永远无法返回,多数网络支持函数都属于这一类。如:若没有客户连接到服务器上,那么服务器的accept调用就没有返回的保证。EINTR错误的产生:当阻塞于某个慢系统调用的一个进程捕获某个信号且相应信号处理函数返回时,该系统调用可能返回一个EINTR错误。例如:在socke
2016-05-18 15:53:24 24600 1
原创 Linux系统使用ps命令查看进程所占cpu和内存比例
linux ps命令,查看进程cpu和内存占用率排序使用以下命令查看:ps -aux | sort -k4,4nps auxw --sort=rssps auxw --sort=%cpulinux 下的ps命令%CPU 进程的cpu占用率%MEM 进程的内存占用率VSZ 进程所使用的虚存的大小RSS 进程使用的驻留集大小或者是实际内存的大小TTY 与进程关联
2016-05-17 09:32:14 13405
原创 多进程并发编程----基于高级的预先创建进程池(accept使用线程上锁)的模型
本博文介绍如何使用线程对accept进程加锁保护。使用线程对accept加锁,不仅适用于同一进程内各线程之间的上锁,同样适用于不同进程之间的上锁。实现要点:1 互斥变量必须存放在所有进程共享的内存区域内2 告知线程函数库这是不同进程之间共享的互斥锁服务端程序的代码如下:#include #include #include #include #include
2016-04-25 17:56:06 1726
原创 多进程并发编程----基于高级的预先创建进程池(accept使用文件上锁)的模型
本篇博文讲解如何使用fcntl文件上锁的方式对accept进行保护。如果多个进程在引用同一个监听套接字的描述符上调用accept,对于不同的内核accept不一定都是原子操作。Berkeley的内核支持这种模型,而system V就会出现问题,那么我们的解决方法之一就是本博文讲解的使用文件上锁保护accept函数调用,保证任意时刻只有一个进程阻塞在accept,其他进程则阻塞在试图获取用于保护
2016-04-25 17:43:45 747
原创 多进程并发编程----基于高级的动态创建进程池的模型
此篇博文主要讲解如何动态创建进程的方法,此方法模型如下:main{ ps=socket(); bind(); listen(); while(1){ cs=accept(); if(cs){ pid=fork(); if(pid==0){//子进程处理 close(ps); do_child(cs); }
2016-04-21 18:01:03 1016
原创 多进程并发编程----基于高级的预先创建进程池(accept不上锁)的模型
此篇博文先介绍最简单的服务器并发模型,此模型的大概框架如下:main{socket();bind();listen();for(i=0;ipid=fork();if(pid==0)//子进程do_child();}waitpid();close(fd);}do_child(){while(1){accept();read();wr
2016-04-21 16:45:09 1119
原创 多进程并发编程----进程间传递文件描述符案例
#include#include#include#include#include#include#include#include#include#includeint send_fd(int fd, void *ptr, size_t nbytes, int sendfd){ struct msghdr msg; struct iovec iov[1]; union
2016-04-15 17:34:48 2092
原创 多进程并发编程----进程间传递文件描述符基础~socketpair函数简介
socketpair函数概要如下:#include #include int socketpair(int domain, int type, int protocol, int sv[2]);sys/types.h文件需要用来定义一些C宏常量。sys/socket.h文件必须包含进来定义socketpair函数原型。socketpair函数需要四个参数。他们是:套接口的域
2016-04-15 17:13:37 1687
原创 多进程并发编程----进程间传递文件描述符基础~发送接收附属数据结构体介绍
附属信息可以包括0,1,或是更多的单独附属数据对象。在每一个对象之前都有一个structcmsghdr结构。头部之后是填充字节,然后是对象本身。最后,附属数据对象之后,下一个cmsghdr之前也许要有更多的填充字节。在这一章,我们将要关注的附属数据对象是文件描述符与证书结构。下图显示了一个包含附属数据的缓冲区是如何组织的。我们需要注意以下几点:cmsg_len与CMSG_LEN
2016-04-15 17:03:30 1351
原创 多进程并发编程----进程间传递文件描述符基础~发送接收附属数据函数介绍
如果fork进程之后,子进程如果想要传递描述给父进程一般使用socketpair函数。此篇文章不介绍socketpair函数,二是介绍sendmsg和recvmsg函数,这两个函数隐藏的机构体有针对socket描述符的选项。具体如下:这两个函数为程序提供了一些其他的套接口I/O接口所不具备的高级特性。从概念上说,sendmsg函数是所有写入函数的基础,而他是从属于套接口的。下面
2016-04-15 16:59:34 1199
原创 Linux网络编程--select,poll和epoll的区别
在Linux Socket服务器短编程时,为了处理大量客户的连接请求,需要使用非阻塞I/O和复用,select、poll和epoll是Linux API提供的I/O复用方式,自从Linux 2.6中加入了epoll之后,在高性能服务器领域得到广泛的应用,现在比较出名的nginx就是使用epoll来实现I/O复用支持高并发,目前在高并 发的场景下,nginx越来越收到欢迎。这里有个文章参考,Ngin
2016-04-14 14:53:49 1661
原创 db2 export与 import中的 codepage 转换
制造不同 CODEPAGE 数据的方式制造不同 codepage 数据的方法有很多种。以下列出 4 种:1. 使用 db2 export。DB2 本身 EXPORT 支持导出各种不同 codepage 的 DEL 格式的文件,例如导出 codepage 为 819 和 1386 的文件,如清单 1 所示。清单 1. 导出 codepage 为 1383和 gb2312的文件,138
2016-04-13 18:08:34 14948 1
原创 Linux网络编程--recv函数返回值详解
recv函数int recv( SOCKET s, char FAR *buf, int len, int flags);不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据。该函数的第一个参数指定接收端套接字描述符; 第二个参数指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据; 第三个参数指明buf的长度; 第四个参数一般置0。这里只描述同步S
2016-04-13 14:37:50 18385 1
原创 在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)
fork ( /directory/script.sh) :如果shell中包含执行命令,那么子命令并不影响父级的命令,在子命令执行完后再执行父级命令。子级的环境变量不会影响到父级。fork是最普通的, 就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本.运行的时候开一个sub-shell执行调用的脚本,sub-shell执行的时候, paren
2016-04-11 10:07:21 847
原创 使用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 4855
原创 linux下打印带有颜色的字体
文本终端的颜色可以使用“ANSI非常规字符序列”来生成。举例: echo -e "\033[44;37;5m ME \033[0m COOL"以上命令设置背景成为蓝色,前景白色,闪烁光标,输出字符“ME”,然后重新设置屏幕到缺省设置,输出字符 “COOL”。“e”是命令 echo 的一个可选项,它用于激活特殊字符的解析器。“\033”引导非常规字符序列。“m”意味着设置属性然后结
2016-04-08 09:32:24 2963
原创 Linux vmstat命令实战详解
vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。一般vm
2016-04-01 13:30:36 538
原创 Linux网络编程--使用epoll,共享内存技术实现高性能的聊天室程序
本篇博文主要介绍使用epoll和多进程的共享内存技术实现高性能的聊天室的服务器程序。#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <assert.h>#include <stdio.h>#include <unistd.h>#include <errno.h>#include <
2016-03-28 10:25:49 4303
原创 Linux网络编程--使用epoll模型同时处理tcp和udp服务
在实际工作中,服务器需要同时监听和处理tcp和udp的套接字,同时监听N多的端口。根据bind系统调用来讲,一个socket只能监听一个端口,因此要创建多个socket并绑定到各个端口上。当然同一个端口可以同时绑定tcp和udp的socket,但是要创建两个socket,一个是tcp的一个是udp的。下面我们就写一个可以同时处理tcp和udp服务的回射服务器。#include <sys/types
2016-03-22 14:43:47 5104 4
sqlapi 源码
2016-01-11
cuit单元测试
2015-10-19
struct和union计算方法
2015-07-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人