分类目录归档:技术

计算机技术

socket close shutdown函数区别

close() 关闭这个socket销毁内存中数据,如果多个进程复用,只影响单个进程。
shutdown() 并不销毁内存中socket,如果多个进程复用,会影响所有进程。

如果接受缓冲区内还有数据没recv完,调用close()会出发RST报文,此时先调用shutdown,再调用close则能正常关闭。

hash表取模技巧

在使用hash表的时候,由于hash表的size不可能无限大,我们必须将hash function求出来的index值映射到hash表的size范围内。一般情况下都是采取取模的形式index % size,但是modulus操作要进行除法运算,在数据量大的时候效率较低,这时候我们可以将size设置为2的某次方,这样只要将index & (size – 1)就可以求得模值,至于为什么是这样,原理很简单,我就不在此赘述了。

批量在文件头插入

最近在整理一套古董代码,古董代码很多头文件stdio.h stdlib.h string.h都没有显示的引用,在gcc上编译总是报错,但是要一个个文件去添加头文文件是件很繁琐的事情,有没有办法一次性把所有的文件都加上这些头文件的引用呢?
继续阅读

bash $用法

$$ 当前bash进程号
$0 当前bash文件名
$? 上一指令的返回值
“$*”参数的内容,单字符串返回,中间以空格分开
“$@”参数内容,返回多个字符串。
$#参数的个数。

bash排除通配符

在bash中我要批量对某些文件做操作可以使用通配符(globbing),但是如果我想排除一些文件,对其他所有文件做操作,要怎么写呢?比如我要把除了sam以外的所有文件(夹)移到sam里面呢?
继续阅读

shellshock强势袭来

shelllock强势袭来,这次漏洞出在俺们最常用的Bash里,而且是从v1到v4潜伏了20多年,基本原理类似SQL注入,BASH会对环境变量值中函数定义后的字符串进行处理:

env X="() { :;} ; cmd" bash -c 'some cmd'

由于本人没有看过Bash的源码,对注入的机制了解不是很深入,根据搜集到的信息:上面的命令将空函数export给环境变量x。 bash内部会将定义成函数的环境变量以一种规范的字符串形式保存,当子bash执行的时候会将这个环境变量作为函数名,对这个函数定义的字符串进行求值,这时候跟在后面的那个命令也被执行了,通过这种方法骇客就可以注入任何他想要的东西。

UE4引擎发布

unreal engine4 正式发布,公开c++源码,采用订阅方式,一个月只要19美元。不过唯一的缺憾是UE4将分享开发者4%的收益。