生日

月亮不知不觉陪伴我度过了20多个年头。如今看起来,世上的得失总是出乎人的意料。

发表在 唠叨 | 标签为 | 留下评论

弹指间

 
 
《僧只律》 中记载:
  “刹那者为一念,二十念为一瞬,二十瞬为一弹指,
   二十弹指为一罗预,二十罗预为一须臾,一日一夜为三十须臾。

 

于是计算得一弹指 = 24*3600 / 30 / 20 / 20  = 7.2秒

发表在 唠叨 | 留下评论

[zz]Linux系统调用列表

Linux系统调用列表

以下是Linux系统调用的一个列表,包含了大部分常用系统调用和由系统调用派生出的的函数。这可能是你在互联网上所能看到的唯一一篇中文注释的Linux系统调用列表,即使是简单的字母序英文列表,能做到这么完全也是很罕见的。

按照惯例,这个列表以man
pages第2节,即系统调用节为蓝本。按照笔者的理解,对其作了大致的分类,同时也作了一些小小的修改,删去了几个仅供内核使用,不允许用户调用的系统调用,对个别本人稍觉不妥的地方作了一些小的修改,并对所有列出的系统调用附上简要注释。

其中有一些函数的作用完全相同,只是参数不同。(可能很多熟悉C++朋友马上就能联想起函数重载,但是别忘了Linux核心是用C语言写的,所以只能取成不同的函数名)。还有一些函数已经过时,被新的更好的函数所代替了(gcc在链接这些函数时会发出警告),但因为兼容的原因还保留着,这些函数我会在前面标上“*”号以示区别。

继续阅读

发表在 网摘 | 标签为 | 留下评论

[zz]linux下screen的用法

使用ssh远程连接 linux服务器工作的时候,比如需要编译某些程序而这时网络不稳定断线, 工作就白干了, 又的重新连接重复刚才的工作,这时候screen就可以派上用场了。

养成好习惯多用 screen!
1.安装screen
———————————
yum install screen
——————————–

2.运行 screen
——————————–
screen
——————————–

3.用法
Ctrl+a 然后按c 建立一个新的screen 会话
Ctrl+a 然后按n 跳转到下一个screen 会话
Ctrl+a 然后按p 返回到上一个screen 会话
Ctrl+a 然后按d 将当前的screen 会话放在背景执行
Ctrl+a 然后按(大写)S 分离一个screen 会话出来,分离后用Ctrl+a 然后按tab键 在分离出来的各screen间跳转。
screen -ls 列出当前所有的screen会话
screen -r 进程号 之前Ctrl+a 然后按d 放在背景执行的会话 呼叫回来。
继续阅读

发表在 未分类, 网摘 | 标签为 , | 留下评论

深入理解计算机系统——第三章小结(2)

继续上次的话题讲一下程序流控制汇编。

C和汇编代码中的语句,默认的方式是顺序的控制流,按照语句或者指令在程序中出现的顺序方式进行。
而某些程序结构,如Switch语句,循环语句和分支语句,则不尽然。

首先介绍CPU中一组单个位的条件码(condition code)寄存器,它们描述了最近的算术或者逻辑操作属性。

一般涉及的条件码:
 CF: 进位标志
 ZF: 零标志
 SF: 符号标志
 OF: 溢出标志

对于cmpb, cmpw, cmpl  (S2, S1),  指令根据S1-S2的差来设置条件码。
 而testb, testw, testl (S2, S1), 指令根据 S1 AND S2来设置条件码。

至于跳转指令,如jmp, jbe, js 等
这里不介绍具体细节,可以自行阅读汇编或者接口相应表格部分。

下面我们就可以来说一些GAS有意思的地方。

下面jbe指令的目标地址是?

8048D1C:  76 DA  jbe xxxxxxx
8048D1E:  EB 24  jmp 8048d44

解读上面的小题需要理解: 
当执行与PC相关的寻址时,程序计数器的值是跳转指令后面的那条指令的地址。
另外,对于存放在2内存中的2进制指令,"76 DA" 来说,后面的0xDA就是我们常常说的偏移量。

于此一来,我们可以计算出 xxxxxxx = 0x8048D1E + 0x00000DA = 0x8048DF8

此外还有一些Tips:
1. 编译器对代码的优化,常常会自己设置新参数,而修改条件判别式,来减少参数和2进制指令个数
2. 对于阅读控制流的汇编码,尽量先转换成while型,而后转换成goto型,事实上,编译器大多时候都是这样设计的。
3. while() {} 语句常常在机器码级被转换成一条判断和 do {} while () 的方式,所以养成习惯写后者(…真的需要这样吗?)

发表在 C, 系统, 编程 | 标签为 , | 留下评论

密码保护:读书计划

这是一篇受密码保护的文章,您需要提供访问密码:

发表在 未分类 | 标签为 , | 要查看留言请输入您的密码。

[zz]GCC入门详解

一下子想不起GCC查看执行文件的汇编码方法,晚上回去翻翻CS:APP

作为自由软件的旗舰项目,Richard Stallman 在十多年前刚开始写作 GCC 的时候,还只是把它当作仅仅一个 C 程序语言的编译器;GCC 的意思也只是 GNU C Compiler 而已。经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言;它现在还支持 Ada 语言、C++ 语言、Java 语言、Objective C 语言、Pascal 语言、COBOL语言,以及支持函数式编程和逻辑编程的 Mercury 语言,等等。而 GCC 也不再单只是 GNU C 语言编译器的意思了,而是变成了 GNU Compiler Collection 也即是 GNU 编译器家族的意思了。另一方面,说到 GCC 对于操作系统平台及硬件平台支持,概括起来就是一句话:无所不在。

1 程序编译过程


  GCC是CUI(命令行交互界面)程序,这让许多从Windows走出来 Guier们感到恐惧。实际上它也有许多前端窗口界面,Windows下有Dev C++,Linux下譬如KDevelopment,但既然选择了GCC还是将CUL进行到底吧,没有难与不难的问题,只有做与不做的问题!

  下面基于一个具体而微的程序,讨论GCC的使用。示例程序如下:

//test.c
#include <stdio.h>
int main(void)
{
  printf(“Hello World!\n”);
  return 0;
}

  这个程序,一步到位的编译指令是:

gcc test.c -o test

  输出的可执行文件名为test,Windows用户可能会感到奇怪,可执行文件明怎么没有.exe扩展名呢?Linux系统中,文件类型并非以扩展名识别的!

  实质上,上述编译过程是分为四个阶段进行的,即预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编 (Assembly)和连接(Linking)。

1.1 预处理

  运行预处理命令:

gcc -E test.c -o test.i  gcc -E test.c

可以输出test.i文件中存放着test.c经预处理之后的代码。打开test.i文件,看一看,就明白了。后面那条指令,是直接在命令行窗口中输出预处理后的代码,而不是以文件作为输出设备。gcc的-E选项,可以让编译器在预处理后停止,并输出预处理结果。在本例中,预处理结果就是将stdio.h 文件中的内容插入到test.c中了。

  gcc的-o选项,用于输出处理结果到文件中。

1.2 编译为汇编代码

  预处理之后,可直接对生成的test.i文件编译,生成汇编代码:

gcc -S test.i -o test.s

  gcc的-S选项,表示在程序编译期间,在生成汇编代码后,停止,-o输出汇编代码文件。

  生成的汇编代码如下:
继续阅读

发表在 C, 编程, 网摘 | 标签为 | 留下评论

菜根谭 [明] 洪应明

余过古刹,于残经败纸中拾得《菜根谭》一录。翻视之,虽属禅宗,然于身心性命之学,实有隐隐相发明者。亟携归,重加校雠,缮写成帙。 旧有序,文不雅驯,且于是书无关涉语,故芟之。 著是书者为洪应明,究不知其为何许人也。
乾隆五十九年二月二日,遂初堂主人识

欲做精金美玉的人品,定从烈火中煅来;思立掀天揭地的事功,须向薄冰上履过

一念错,便觉百行皆非,防之当如渡海浮囊,勿容一针之罅漏;万善全,始得一生无愧。修之当如凌云宝树,须假众木以撑持。

忙处事为,常向闲中先检点,过举自稀。动时念想,预从静里密操持,非心自息。

为善而欲自高胜人,施恩而欲要名结好,修业而欲惊世骇俗,植节而欲标异 见奇,此皆是善念中戈矛,理路上荆棘,最易夹带,最难拔除者也。须是涤尽渣滓,斩绝萌芽,才见本来真体。

能轻富贵,不能轻一轻富贵之心;能重名义,又复重一重名义之念。是事境之尘氛未扫,而心境之芥蒂未忘。此处拔除不净,恐石去而草复生矣。

纷扰固溺志之场,而枯寂亦槁心之地。故学者当栖心元默,以宁吾真体。亦当适志恬愉,以养吾圆机。

昨日之非不可留,留之则根烬复萌,而尘情终累乎理趣;今日之是不可执,执之则渣滓未化,而理趣反转为欲根。

无事便思有闲杂念想否。有事便思有粗浮意气否。得意便思有骄矜辞色否。

失意便思有怨望情怀否。时时检点,到得从多入少、从有入无处,才是学问的真消息。

士人有百折不回之真心,才有万变不穷之妙用。立业建功,事事要从实地着脚,若少慕声闻,便成伪果;讲道修德,念念要从虚处立基,若稍计功效,便落尘情。

身不宜忙,而忙于闲暇之时,亦可儆惕惰气;心不可放,而放于收摄之后,亦可鼓畅天机。

钟鼓体虚,为声闻而招击撞;麋鹿性逸,因豢养而受羁糜。可见名为招祸之本,欲乃散志之媒。学者不可不力为扫除也。

继续阅读

发表在 网摘 | 标签为 | 留下评论

HTML5 简单小画笔

小小的写了一下,HTML5的新特性还是很容易上手。
和博客的兼容性问题没有调整,所以单独放在外面

小例子猛击这里

发表在 编程, 网络 | 标签为 , | 留下评论

Ubuntu 10.04 下修改终端(ttyx)分辨率方法

部分内容来源网络,作者整理实践总结,转载保留。

 解决方向: 
            A 安装驱动后开机和关机画面花屏,分辨率低
            B tty终端花屏
            C 网上找的总总方法错误后无法还原

重新选择显卡驱动,使用(Recommended)(推荐)的显卡。

安装所需包 :
sudo apt-get install v86d hwinfo

查看framebuffer :
sudo hwinfo --framebuffer

我的显示器分辨率是1280x800的所以我需要的是:1280x800-24 
记录下对应的vga=0x0361

修改grub文件 :
sudo gedit /etc/default/grub

-------修改GRUB_CMDLINE_LINUX_DEFAULT
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset 
video=uvesafb:mode_option=1280x800-24,mtrr=3,scroll=ywrap"

-------修改GRUB_CMDLINE_LINUX
GRUB_CMDLINE_LINUX="vga=0x0361"

-------修改#GRUB_GFXMODE栏
GRUB_GFXMODE=1280x800-24

修改initramfs:
sudo gedit /etc/initramfs-tools/modules
-----
最后一行写入
uvesafb mode_option=1280x800-24 mtrr=3 scroll=ywrap
-----

强制使用Framebuffer:
echo FRAMEBUFFER=y | sudo tee /etc/initramfs-tools/conf.d/splash

更新grub和initramfs:
sudo update-grub2
sudo update-initramfs -u

重启。


参考链接:
http://www.linuxidc.com/Linux/2010-06/26422.htm
http://qiuye.javaeye.com/blog/452193
http://forum.ubuntu.org.cn/viewtopic.php?t=236344

发表在 Linux, 系统 | 标签为 | 留下评论