链接任意目录下库文件(解决错误“/usr/bin/ld: cannot find -lxxx”)

g++ 编译中链接库文件选项有: -L **  -lxxx

其中 -L 告诉编译器哪里去寻找库文件,** 指的是库文件所在路径,xxx 是库文件的名称,那么-lxxx 告诉编译器去找库文件libxxx.a(而不是xxx.a)。

如果生成的库文件时bplus.a ,就需要将其重命名为libbplus.a 这样才会找到该文件。否则,报如下错误

/usr/bin/ld: cannot find -lbplus
collect2: ld returned 1 exit status

继续阅读

使用Python Crypto.Cipher 测试AES 加密速度

Crypto 提供AES 加/解密。有几点需要注意:

  1. 密钥key 长度必须为16(AES-128),24(AES-192),或者32 (AES-256)Bytes 长度
  2. 每次使用encrypt( ) 方法加密的内容必须为16 Bytes 长度
  3. Crypto AES加密模式有ECB/CBC/CFB 等模式,ECB 不需要使用iv 参数,CBC 等链式模式需要iv 参数
  4. ECB 是最简单的分块加密方式,CBC 当前加密结果和之前所有加密块都有关系,抗频率分析
  5. iv 是用于链式加密的参数,加密时长度必须等于AES.block_size,解密时长度为block_size+2 Bytes

继续阅读

磁盘测速

一、写在测试之前的

程序测试磁盘速度应该考虑到几点:

  1. 首先是内存的存在。内存作为读写的缓冲区,写入一个文件到磁盘时fflush() 会将写入数据从用户态转为核态,只有核态命令fsync() 才能够将数据真正的刷新的硬盘。内存作为缓存在读时可能影响更大。
  2. 其次是磁盘缓存,磁盘缓存是非易失性的,速度接近于内存,但容量一般在16MB~64MB 之间。会对写入速度的测试有较大影响。比如对于64MB 缓存硬盘,只写入一个小于64MB 文件后计算速度会非常大。
  3. 不同磁道上扇区密度不同。如下左图是比较旧磁盘采用的磁道上扇区分法,这样的在同样一圈磁道上扇区数相同,内外径不同磁道上磁头旋转一圈读取的数据量相同,缺点就在于外径扇区没有充分利用较大的磁道。而右边采用的近似等线密度的扇区分区,外径上磁道比内径上磁道具有更多的扇区,也就是说磁头在外径磁道上旋转一周的时间会读取更多的数据,这点在后面的实验中也有证实。
  4. 还有一个需要考虑到得是文件系统的影响,文件系统决定了文件的放置,很大程度上决定了测试的读写性能,比如Linux ext 文件系统就和windows 的文件系统不同(因为不需要碎片整理了)。在下面大部分测试中都使用的是打开文件、写文件、关闭文件,然后对同一个文件重复同样流程。

  1  2

继续阅读