- 博客(45)
- 收藏
- 关注
原创 经典的读者写者问题
/* * read_write_lock.h * * Created on: July 29, 2016 09:55:16 * Author: xtank.nie@gmail.com */#ifndef __READ_WRITE_LOCK_H__#define __READ_WRITE_LOCK_H__#ifdef __cpluspluse
2016-07-30 17:33:39 739
原创 makefile中“=”和“:=”的区别
makefile中“=”和“:=”在给变量赋值时,两个符号都在使用。1、“=”make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。看个例子:x = fooy = $(x) barx = xyz在上例中,y的值将会是 xyz bar ,而不是 foo bar 。2、“:=”“:=
2015-08-21 00:31:16 872
原创 samba服务器配置文件示例
[xtank] comment = xtank browseable = yes writeable = yes valid users = xtank path = /home/xtank create mode = 0664 directory mode = 0775
2015-08-19 00:13:17 691
原创 浮动IP简介
在做双机的时候,设定的一个IP,通过访问这个IP,具体到后台哪台机器,由系统指定。浮动IP是随资源一起走的。 其实就是由软件根据具体情况把该IP设置在某一台机器上,对外提供服务为了避免因为一台机器宕机而导致不能对外提供服务,致使业务中断,使用两台机器进行提供服务,但是用户怎么知道自己使用哪个IP进行连接呢?使用其中的一个,如果这个宕机了,就仍然会中断服务。于是就使用一个h
2015-07-22 11:13:35 8997 1
转载 Python变量的作用域
几个概念:python能够改变变量作用域的代码段是def、class、lamda.if/elif/else、try/except/finally、for/while 并不能涉及变量作用域的更改,也就是说他们的代码块中的变量,在外部也是可以访问的变量搜索路径是:本地变量->全局变量python能够改变变量作用域的代码段是def、class、la
2015-07-20 17:32:11 398
原创 bash终端操作常用快捷键
1、tab=补全 2、ctrl-c -杀死当前任务 3、Alt+1:切换到标签页1 4、Alt+2:切换到标签页2 5、Alt+3:切换到标签页3 6、history 显示命令历史列表 7、↑(Ctrl+p) 显示上一条命令 8、↓(Ctrl+n) 显示下一条命令 9、!num 执行命令历史列表的第num条命令 10、!! 执行上一条命令 11、!?stri
2015-07-15 23:54:14 797
转载 Vim常用操作
Vim常用操作1、将光标移动到文件的开始位置或结束位置gg 将光标移动到文件的开始位置。G 将光标移动到文件的最后一行。对当前行做标记,例如ma,即标记当前行为a行,mb,即标记当前行为b行,mc,即...等等。要回到a行使用'a。要回到b行使用'b。 2、 vim中快速定位到当前光标所在变量或函数处gd 3、 vim中进行C和C++源码对齐操作
2015-06-15 23:39:20 579
原创 ntel Xeon E5-2658的CPU核ID和线程ID的对应关系
cpu0核ID0123489101112线程ID0201212223234245256
2015-06-07 09:44:34 2032
转载 linux非阻塞套接字的联机请求问题
在一个TCP套接口被设置为非阻塞之后调用connect,connect 会立即返回EINPROGRESS错误,表示连接操作正在进行中,但是仍未完成;同时TCP的三路握手操作继续进行;在这之后,我们可以调用select来检查这个链接是否建立成功。非阻塞connect有三种用途:1. 我们可以在三路握手的同时做一些其它的处理。connect 操作要花一个往返时间完成,而且可以是在任何地方,
2015-05-03 00:29:30 872
原创 route命令的简单用法
一、网段:route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1route add -net 192.168.2.0 netmask 255.255.255.0 dev eth0route del -net 192.168.2.0 netmask 255.255.255.0 //删除时可以不用写网关
2015-04-20 23:20:31 582
原创 ARP协议的工作过程
一、原理 因为TCP/IP协议的层次结构,当数据报文从协议栈内部下行送到L2层时,会添加以太网帧头部结构,即dst MAC/src MAC/type等字段,ARP协议能实现从IP地址到MAC地址的转换,src ip比较容易得到, dst ip可能就会用到路由中的下一跳了,扯远了。总之即:ip--->MAC;注意ARP的数据报是在一个局域网内部收发的。二、报文格式:字
2015-04-19 22:59:43 2977
原创 linux的CPU物理颗数、内核数、线程数查看及关系
一、CPU的型号:使用命令more /proc/cpuinfo |grep "model name" 可以得到:例如,我的老人机:model name : AMD Athlon(tm) 64 X2 Dual Core Processor 5200+model name : AMD Athlon(tm) 64 X2 Dual Core Processor 5200+
2015-04-15 23:31:09 2168
转载 Linux下删除除了某个文件外的其他文件
Linux下除了某个文件外的其他文件全部删除,最简单的方法是:1、 #shopt -s extglob2、 #rm -fr !(file1)如果要多个排除, 可以这样:#rm -rf !(file1|file2)
2015-04-12 18:28:18 1458
转载 低分辨率定时器的原理和实现
利用定时器,我们可以设定在未来的某一时刻,触发一个特定的事件。所谓低分辨率定时器,是指这种定时器的计时单位基于jiffies值的计数,也就是说,它的精度只有1/HZ,假如你的内核配置的HZ是1000,那意味着系统中的低分辨率定时器的精度就是1ms。早期的内核版本中,内核并不支持高精度定时器,理所当然只能使用这种低分辨率定时器,我们有时候把这种基于HZ的定时器机制成为时间轮:time wheel。虽
2015-03-25 23:45:57 1055
原创 source insight 的base工程配置文件utils.em的修改
/* * utils.em * * Created on: March 13, 2015 * Author: xtank.nie@gmail.com *///szMyName = getenv(MYNAME)/* * 1. GetCurrentBuf(): 获取当前输入的句柄 * 2. GetCurSymbol(): 获取当前光标后的符号 * 3. GetBuf
2015-03-14 02:31:36 5368
原创 dpdk的编译
一、主页http://dpdk.org/二、源码下载http://dpdk.org/download本次下载的版本是1.8.0.tar.gz.三、编译环境软件:VMware 9.0 + CentOS 6.5_x64(2.6.32-431.el6.x86_64)硬件:AMD Athlon(tm) 64 X2 Dual Core Processor
2015-03-07 21:54:40 1764 1
转载 关于STL中的map和hash_map (转)
在网上看到有关STL中hash_map的文章,以及一些其他关于STL map和hash_map的资料,总结笔记如下:一、基本情况:1、STL的map底层是用红黑树实现的,查找时间复杂度是log(n);2、STL的hash_map底层是用hash表存储的,查询时间复杂度是O(1);3、什么时候用map,什么时候用hash_map? 这个要看具体的应用,不一定常数级别的has
2015-03-04 00:04:41 554
原创 Linux常用命令
一、账户添加sudo useradd -m xtank //自动在/home下建立默认目录二、账户删除sudo userdel -r xtank三、修改用户账号sudo usermod -p 123456 wang /* 修改用户的密码, /etc/shadow为明文,用passwd修改为密文 */四、文件清单命令ls -lrFt //按照修改
2015-02-01 22:09:47 412
原创 汇编基础(1)
一直想了解下汇编,觉得Richard Blum的《汇编语言程序设计》还是相对讲的通俗、实践性强一点。选择它主要还是因为和Linux打交道的日子比较多,书里的汇编版本也是比较经常会见到的AT&T的风格。毕竟它是一门与机器相关的语言,选择一个什么样的环境来了解还是需要考虑一下的,这里用Intel IA-32平台 + Ubuntu 10.04(2.6.32),文中的插图摘自原书。机器指令码格
2015-01-13 21:27:34 736
原创 对于用户自定义类型typedef和define有什么区别
最好使用typedef,部分原因是它能正确处理指针类型,如:typedef char *String_t;#define String_d char *String_t a, b; //equal char *a, *b;String_d a, b;//equal char *a, b;这里很显然和作者原意有出入二者的差异就很明显了;摘自《你必须知道de495个C语言问题》
2014-12-23 22:37:55 658
转载 ubuntu在ping运行时终端回显特别慢,但实际数据包time值并不大的解决方法(转)
/etc/nsswitch.conf 作用:用于处理Hosts表和DNS的顺序 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. 客户机根据/etc/nsswitch.conf文件来确定名字解析的顺序。在本例中,假定的顺序是:首先是本地文件,其次NIS+服务器,最后是DNS。 2. 客户机查找本地/etc/inet
2014-11-29 10:42:28 4061
转载 TCP的三次握手和四次挥手详细过程(转)
一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负责不同的通信功能。包含以下四个层次:1. 链路层,也称作数据链路层或者网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。2. 网络层,也称作互联网层,处理分组在网络中的活动,例如分组
2014-11-26 11:28:22 927
原创 各种内部排序算法的测试
/* 各种内部排序算法的测试 */#include #include #include //辅助函数/* 产生size以内的size个随机数放到array中 */static void random_access(int array[], int size);static void show_array(const int array[], int size);/* 1. 直接
2014-11-15 00:09:02 825
原创 二叉堆(优先队列)的基本操作的测试
/* 二叉堆(优先队列)的基本操作的测试(从小到大排列) */#include #include typedef struct _tBINARY_HEAP_{ int max_size; int current_size; int *node;}tBINARY_HEAP;const int MAX_HEAP_SIZE = 10;const int MIN_
2014-11-14 21:20:37 766
原创 二叉排序树的基本操作测试
/* 二叉查找树的基本操作实现测试 *//* 节点的左子树比节点小, 右子树比节点大 */#include typedef struct _tBINARY_SEARCH_TREE_{ _tBINARY_SEARCH_TREE_ *lchild; _tBINARY_SEARCH_TREE_ *rchild; int value;}tBINARY_SEARCH_TR
2014-11-13 16:00:48 775
原创 后缀表达式建立二叉树并遍历测试
/* 后缀表达式建立二叉树并遍历测试 * 原理: 扫描后缀表达式,遇到操作数时即建立单二叉树节点, 左右指针都为空,放入栈中, 遇到 操作符时也建立单二叉树节点, 但是节点的左右指针需要取栈顶元素,即此时依次从栈顶 出栈的元素分别作为当前扫描节点的右,左子树(注意顺序), 之后也将该节点进栈, 循环 该步骤直到后缀表达式结尾, 此时栈顶元素即为建立好的二叉树的根节点.
2014-11-12 00:54:06 2033
原创 简单中序算术表达式直接建立二叉树测试
/* 简单中序算术表达式转为二叉树, 至于转成了二叉树, 前中后遍历就随意了 1. 将表达式转为后缀表达式, 然后转为二叉树, 或者用2步骤. 2. 理论上来讲, 一个中缀表达式是不能够转换出一个唯一的二叉树的, 但是中缀算术表达式因为有运算符的优先级关系, 建立二叉树时, 需要所有的操作数 都在叶子节点上, 所有的操作符都在父(根)节点上, 这个特征可以生成一
2014-11-11 23:08:12 4319
原创 利用栈将简单中缀表达式转为后缀表达式的测试
/* 通过使用栈将简单四则运算中缀表达式转换为后缀表达式 * '+', '-', '*', '/', '(', ')'共六种符号 * 原理: 1. 运算优先级规则是从左至右, 先乘除后加减, 有括号先算括号 2. 逐个扫描表达式, 将遇到的操作数都按原样输出, 碰到操作符时, 转3. 3. 扫描到的操作符与栈顶元素比较优先级, 栈顶元素的优先级大于等于扫描的操作符时,
2014-11-11 16:49:21 1161
原创 利用栈对四则运算简单表达式求解的测试(中缀表达式)
/* * 利用栈计算简单中缀表达式的值 * 简单原理: 1. 扫描整个表达式, 用两个栈, 一个存放操作符, 一个存放操作数, 注意力集中到 操作符上. 2. 当发现操作符栈栈顶的元素的优先级比扫描到的操作符的优先级高时, 该操作符出栈, 从操作数栈里退栈两元素来计算结果再放回操作数栈中, 重复该步骤, 直到发现栈中 没有操作符的优
2014-11-10 18:40:57 1200
原创 单链表的反转问题测试
#include typedef struct _tNODE_{ int pos; _tNODE_ *next;}tNODE;tNODE *create_node_list(int num){ if (num < 1) return NULL; tNODE *head = NULL, *q = NULL; int i = 1; whi
2014-11-09 22:24:06 662
原创 精简的约瑟夫环问题
#include #include #include /* 精简的瑟夫环问题 * N个人围着坐成一圈, 各自的编号从1到N, 可以从编号为1的人开始报数, 为接近现实情况, * 报数从1开始, 设定一个报数的上限值M, 报数为M的人出列, 下一编号的人继续从1开始报 * 数, 问最后剩下人是那个编号? * 例如: N=5, N=1时, 大家从1开始一次退出,最后剩下编号3; N=5
2014-11-09 22:13:28 511
转载 单台服务器上的并发TCP连接数可以有多少
曾几何时我们还在寻求网络编程中C10K问题的解决方案,但是现在从硬件和操作系统支持来看单台服务器支持上万并发连接已经没有多少挑战性了。我们先假设单台服务器最多只能支持万级并发连接,其实对绝大多数应用来说已经远远足够了,但是对于一些拥有很大用户基数的互联网公司,往往面临的并发连接数是百万,千万,甚至腾讯的上亿(注:QQ默认用的UDP协议)。虽然现在的集群,分布式技术可以为我们将并发负载分担在多台服务
2014-09-22 18:10:53 1718
原创 linux下简单的ping程序
简单的整理了一个以前用的ping程序, 个人对初学者学习网络协议还是有一定帮助的,最好是利用抓包工具查看下具体的数据报文。/* * ping.cpp * * Created on: Sep 10, 2014 * Author: xtank.nie@gmail.com */#include #include #include #include #includ
2014-09-12 00:01:50 1023
转载 水平触发和边缘触发的区别
水平触发(level-triggered,也被称为条件触发)LT: 只要满足条件,就触发一个事件(只要有数据没有被获取,内核就不断通知你)边缘触发(edge-triggered)ET: 每当状态变化时,触发一个事件 “举个读socket的例子,假定经过长时间的沉默后,现在来了100个字节,这时无论边缘触发和条件触发都会产生一个read ready notification通知应用程
2014-09-03 15:51:50 599
转载 TCP/IP协议三次握手与四次握手流程解析(转)
TCP/IP协议三次握手与四次握手流程解析 一、TCP报文格式 TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图:图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。 (2)确认序号:Ack序号,占32位,只有
2014-08-27 18:32:51 543
原创 关于FTP(未完)
一、FTP两种工作模式:主动模式(Active FTP)和被动模式(Passive FTP) 在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令。服务器接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。 在被动模式下,F
2014-08-23 19:03:39 1474
原创 valgrind 3.9交叉编译
1、下载地址:http://valgrind.org/downloads/current.html#current2、配置:./configure CC=arm-none-linux-gnueabi-gcc --host=arm-unknown-linux-gnueabi --prefix=/home/xtank/project/linux_compress_file/valgri
2014-05-27 17:39:01 2299
原创 移植NTFS-3G到ARM-linux环境
linux的Kernel本来对NTFS支持就不好,硬是要用的话就看上了第三方的开源库,http://www.tuxera.com/community/ntfs-3g-download/页面可以下载最新的源代码,最近又遇到了读写的性能问题,愁死人了,CPU百分比刷刷的飚的老高了,这里先记录这些折腾的过程:NTFS-3G需要依赖用户空间文件系统FUSE的支持,一般我们现在用的kernel版本应该都
2014-05-21 18:46:31 5009 1
原创 SVN客户端1.8.8的安装过程
本来想用命令看下代码的版本,结果报错说啥版本太低,不支持,查了下,是因为在windows下使用了smb把代码导入到机器里的,而且windows的SVN客户端的版本明显比linux下的高,我的windows客户端是:TortoiseSVN 1.8.2, Build 24708 - 64 Bit , 2013/08/27 19:20:39Subversion 1.8.3
2014-05-13 18:35:45 3727
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人