2011年11月2日
摘要: 在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视。 但是,最近在读我们项目的代码时,却发现了do...while的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性。 1. do...while(0)消除goto语句。 通常,如果在一个函数中开始要分配一些资源,然后在中途执行过程中如果遇到错误则退出函数,当然,退出前先释放资源,我们的代码可能是这样: version 1 bool Execute() { // 分配资源 int *p = n... 阅读全文
posted @ 2011-11-02 20:27 wanghetao 阅读(1530) 评论(0) 推荐(0) 编辑
  2011年11月1日
摘要: scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串"hi hello",则应该使用__gets__函数。gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格。char string[15]; gets(string); /*遇到回车认为输入结束*/scanf("%s",string); /*遇到空格认为输入结束*/所以在输入的字符串中包含空格时,应该使用gets输入。scanf和gets获取字符串时的区别在C语言中,能构获取字符串的函数至少有两个:1.scanf( 阅读全文
posted @ 2011-11-01 21:49 wanghetao 阅读(168816) 评论(7) 推荐(12) 编辑
摘要: Include的header文件,连结数据库,系统定义,总共有下列来源指定gcc去那找。 当初在编译时指定的(在~gcc/gcc/collect2.c:locatelib() 写在specs内的 后来用-D -I -L指定的 gcc环境变量设定(编译的时候) ld.so的环境变量(这是run time的时候) 一、头文件 gcc 在编译时如何去寻找所需要的头文件 : ※所以header file的搜寻会从-I开始 ※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INC... 阅读全文
posted @ 2011-11-01 10:34 wanghetao 阅读(2318) 评论(0) 推荐(0) 编辑
  2011年10月28日
摘要: 1 什么是TSS TSS 全称task state segment,是指在操作系统进程管理的过程中,任务(进程)切换时的任务现场信息。 2 TSS工作细节 TSS在任务切换过程中起着重要作用,通过它实现任务的挂起和恢复。所谓任务切换是指,挂起当前正在执行的任务,恢复或启动另一任务的执行。在任务切换过程中,首先,处理器中各寄存器的当前值被自动保存到TR(任务寄存器)所指定的TSS中;然后,下一任务的TSS的选择子被装入TR;最后,从TR所指定的TSS中取出各寄存器的值送到处理器的各寄存器中。由此可见,通过在TSS中保存任务现场各寄存器状态的完整映象,实现任务的切换。 3 TSS的格式... 阅读全文
posted @ 2011-10-28 20:59 wanghetao 阅读(15352) 评论(0) 推荐(5) 编辑
摘要: 在gcc中,可以使用 __asm__ 进行汇编语言的内嵌。 __volatile__ 表明编译器不要优化代码,后面的指令保持原样。C语言关键字volatile表明某个变量的值在外部可能被改变,因此对这些变量的存取不能缓存到寄存器,每次使用都要重新存取。 阅读全文
posted @ 2011-10-28 12:15 wanghetao 阅读(499) 评论(0) 推荐(1) 编辑
摘要: 当Linux内核要寻找一个新的进程在CPU上运行时,必须只考虑处于可运行状态的进程,(即在TASK_RUNNING状态的进程),因为扫描整个进程链表是相当低效的,所以引入了可运行状态进程的双向循环链表,也叫运行队列(runqueue)。运行队列容纳了系统中所有可以运行的进程,它是一个双向循环队列该队列通过task_struct结构中的两个指针run_list链表来维持。队列的标志有两个:一个是“空进程”idle_task、一个是队列的长度。有两个特殊的进程永远在运行队列中待着:当前进程和空进程。前面我们讨论过,当前进程就是由cureent指针所指向的进程,也就是当前运行着的进 程,但是请注意, 阅读全文
posted @ 2011-10-28 10:33 wanghetao 阅读(4738) 评论(0) 推荐(0) 编辑
摘要: 在研究进程fork()的时候,这个调用了do_fork(),其中do_fork()又涉及到进程的pid分配,这个东西的源代码有许多个版本,而且各自都不是一样的。昨天晚上研究了一晚上,今天从下午研究到现在,总算把内核中pid位图算法有一个整体的把握了。明天早上继续完成这篇博客,现在小小的庆祝一下,明天完成。 首先我们先看一个程序,这个程序是我从网上找的,这个程序的主要部分也是内核中的代码,下面我们就来分析一下这个程序。注:原程序有许多bug虫,下面的程序是我修改正确之后的程序,也算是有一点自己的共享吧,另外,原程序没有解释,我的解释估计还算详细吧,不废话了,我们一起来分析一下程序吧。小知识:.. 阅读全文
posted @ 2011-10-28 09:34 wanghetao 阅读(4394) 评论(0) 推荐(0) 编辑
  2011年10月26日
摘要: 昨天晚上我编写了一段简短的C语言程序(Linux环境下),编译能够通过,但是运行的时候老是报段错误。我当时非常郁闷,因为代码不长。其中主函数中有这样一句话: char *str="epmzm bpmzm qa eqtt bpmzm qa i eig";以后的代码对这个字符串进行操作(修改了其中的字符)。但是改成char str[]="epmzm bpmzm qa eqtt bpmzm qa i eig";之后就能正常运行了。我想了很久,也和同学进行了讨论。最后还是我想出了原因。第一种方式首先创建一个字符串常量并用str指针指向它,这在语法上当然没有错。但 阅读全文
posted @ 2011-10-26 09:42 wanghetao 阅读(6446) 评论(0) 推荐(0) 编辑
  2011年10月21日
摘要: 首先肯定要读一读Bjarne Stroustrup的The Design and Evolution of C++,了解 一下这个语言的历史。接下来就可以看别的书了,但要不停地回头看这本书,看到 你不断地学到的新技术是怎么样一点点地被接纳到这个语言中去的。 第一本书因人而异,基础好一些的,可以看Stanley B. Lippman的C++ Primer,这 本书非常地巨大,你打星号的部分可以不要看。基础不太好的,可以看Stanley B. Lippman的Essential C++,这本书份量要轻得多,不过四个C++的范型都讲了,而 且讲得非常清楚。 第二本应该停止技术层面的东西,静下心来看看 阅读全文
posted @ 2011-10-21 20:58 wanghetao 阅读(5104) 评论(0) 推荐(1) 编辑
  2011年10月20日
摘要: http://blog.csdn.net/yunsongice?viewmode=list 阅读全文
posted @ 2011-10-20 21:54 wanghetao 阅读(153) 评论(0) 推荐(0) 编辑