代码改变世界

使用shell/python获取hostname/fqdn释疑

2016-01-24 00:42 by Florian, 146 阅读, 收藏, 编辑
摘要: 一直以来被Linux的hostname和fqdn(Fully Qualified Domain Name)困惑了好久,今天专门抽时间把它们的使用细节弄清了。 一、设置hostname/fqdn 在Linux系统内设置hostname很简单,如: $ hostname florian 如果...阅读全文

提问的智慧

2015-10-15 14:43 by Florian, 68 阅读, 收藏, 编辑
摘要: 提问的智慧英文原文:Eric S. Raymond,翻译:王 刚引言在黑客的世界里,你所提技术问题的解答很大程度上取决于你提问的方式与解决此问题的难度,本文将教你如何提问才更有可能得到满意的答复。开源程序的应用已经很广,你通常可以从其他更有经验的用户而不是黑客那里得到解答。这是好事,他们一般对新手常...阅读全文

ARM汇编指令调试方法

2015-10-09 23:45 by Florian, 734 阅读, 收藏, 编辑
摘要: 学习ARM汇编时,少不了对ARM汇编指令的调试。作为支持多语言的调试器,gdb自然是较好的选择。调试器工作时,一般通过修改代码段的内容构造trap软中断指令,实现程序的暂停和程序执行状态的监控。为了在x86平台上执行ARM指令,可以使用qemu模拟器执行ARM汇编指令。 一、准备ARM汇编程序 首...阅读全文

高性能IO模型浅析

2014-11-14 23:39 by Florian, 19364 阅读, 收藏, 编辑
摘要: 高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:(1)同步阻塞IO(BlockingIO):即传统的IO模型。(2)同步非阻塞IO(Non-blockingIO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的N...阅读全文

使用vbs脚本进行批量编码转换

2014-06-11 15:52 by Florian, 1295 阅读, 收藏, 编辑
摘要: 使用vbs脚本进行批量编码转换 最近需要使用SourceInsight查看分析在Linux系统下开发的项目代码,我们知道Linux系统中文本文件默认编码格式是UTF-8,而Windows中文系统中的默认编码格式是Gb2312。系统内的编码格式有所区别倒无伤大雅,关键的是SourceInsigh...阅读全文

Linux模块机制浅析

2014-05-15 21:47 by Florian, 3537 阅读, 收藏, 编辑
摘要: Linux模块机制浅析 Linux允许用户通过插入模块,实现干预内核的目的。一直以来,对linux的模块机制都不够清晰,因此本文对内核模块的加载机制进行简单地分析。 模块的Hello World! 我们通过创建一个简单的模块进行测试。首先是源文件main.c和Makefile。 f...阅读全文

源文件移动后gdb不显示代码的原因

2014-05-15 14:44 by Florian, 1951 阅读, 收藏, 编辑
摘要: 源文件移动后gdb不显示代码的原因 问题 我们从一个最简单的C语言程序开始。源文件main.c在用户目录gdb文件夹下。 florian@florian-pc:~/gdb$ cat main.c int main() { return 0; }; 然后将源文件编译为...阅读全文

Linux的原子操作与同步机制

2014-04-09 18:45 by Florian, 7761 阅读, 收藏, 编辑
摘要: Linux的原子操作与同步机制 并发问题 现代操作系统支持多任务的并发,并发在提高计算资源利用率的同时也带来了资源竞争的问题。例如C语言语句“count++;”在未经编译器优化时生成的汇编代码为。 当操作系统内存在多个进程同时执行这段代码时,就可能带来并发问题。 假设count变量初始值为0。进程1执行完“mov eax, [count]”后,寄存器eax内保存了count的值0。此时,进程2被调度执行,抢占了进程1的CPU的控制权。进程2执行“count++;”的汇编代码,将累加后的count值1写回到内存。然后,进程1再次被调度执行,CPU控制权回到进程1。进程1接着执行,...阅读全文

ARM的常数表达式

2014-03-03 20:18 by Florian, 1276 阅读, 收藏, 编辑
摘要: ARM的常数表达式 如果说Intel指令中的立即数,相信大家都很熟悉。类似的,Arm指令中的“立即数”就是常数表达式。之所以称为常数表达式,而不称为立即数是有原因的。 Intel指令属于CISC指令集,指令是不定长的,因此可以将任意32位立即数编码到指令内。 Arm指令属于RISC指令集,指令是定长的32字节。众所周知,指令中操作码是必须的字段,如果把32位立即数直接编码到指令内部,操作码就无“容身之地”了…… 因此,Arm指令中“立即数”的位数必小于32位。那么如何在Arm指令中正常表示立即数呢?我们看看Arm的通用指令格式。 Arm指令中,操作码(opcode)、...阅读全文

扫描器的高效实现

2014-03-02 22:45 by Florian, 1099 阅读, 收藏, 编辑
摘要: 扫描器的高效实现 编译器进行词法分析时,不可避免地需要对源文件进行扫描,实现该功能的模块称为扫描器。扫描器读取源文件,按序返回文件内的字符,直到文件结束。 扫描器的功能 实现文件的读一般使用库函数fscanf或者fread,那么按照怎样的读取方式才能让扫描器的性能更佳呢? (1)使用fscanf逐字扫描,并返回。 char scan(FILE*file){ char ch; if(fscanf(file,"%c",&ch)==EOF){ ch=-1; } return ch; } 这是最简单的实现方式,缺点是每次读取字符时都需要访问文件进行I...阅读全文