自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 资源 (1)
  • 收藏
  • 关注

原创 利用树统计单词出现的频率

源自《The C Programmin Language》P122 ex6.5 代码位于ex6.5:统计输入中所有单词的出现次数代码:#include #include /* 为了使用isalpha,isspace等字符判别函数 */#include

2011-08-08 17:24:44 2732

原创 通过命令行参数对输入进行排序

源自《The C Programming Language》P102 ex5.11及其后的pr 5-14 ... pr 5-14,代码见pr 5-16:代码:#include #include #define MAXLINES 5000 /*进行排序的最大文本

2011-07-25 14:48:22 1265 1

原创 带命令行参数的detab函数

源自《The C Programming Language》P102 pr5-11:      修改程序entab和detab(第一章练习中编写的函数),使它们接受一组作为参数的制表符停止位。如果启动程序时不带参数,      则使用默认的制表符停止位设置      代码:

2011-07-12 18:34:16 1424

原创 从输入流中读取整形和浮点型数据存储在实参所指的内存空间中

     源自《The C Programming Language》P83 pr5-2:     模仿函数getInt 的实现方法,编写一个读取浮点数的函数getFloat,getFloat函数的返回值应该是什么类型呢?    代码:    #include #include int getInt(int *);int getFloat(double *);

2011-06-22 11:40:00 1765

原创 递归形式的itoa及reverse函数的实现

     源自《The C Programming Language》P75 pr4-12, 4-13:          编写递归版本的itoa及reverse函数      代码:     #include #include void printd(int n);void itoa(int n, char s[]);void reverse(char s

2011-06-15 17:33:00 3890 1

原创 逆波兰计算器(C语言)

     源自《The C Programming Language》 P62 ex4.3:     计算例如:(1 - 2) * (4 + 5)的值,采用逆波兰表示法(即后缀表示法)      代码:     main.c     #include #include //为了使用库函数atof#include //使用sin, exp, pow等数学函数

2011-06-07 17:29:00 9284 2

原创 atof函数,可以处理科学计数法

<br />     源自《The C Programming Language》P62 pr4-2:<br />     <br />     对atof函数进行扩充,使它能够处理形如:123.45e-6的科学表示法,其中浮点数后面可能会紧跟一个e或E以及一个指数<br /> <br />     代码:<br />     #include <stdio.h>#include <ctype.h>#define MAXLINE 100int getLine(char s[], in

2011-06-01 11:43:00 4734

原创 itoa函数,考虑当待处理整数为-2^(字长-1)的情况

<br />     源自《The C Programming Language》 P53 pr3-4:<br /> <br />     在数的对二的补码表示中,我们编写的itoa函数不能处理最大的负数,即n等于-(2^(字长-1))的情况。请解释原因,<br />     修改函数使得它在任意机器上运行时都能得到正确结果。<br /> <br />     代码:<br />     #include <stdio.h>#include <string.h>#define MAXLINE

2011-05-25 15:52:00 1386 1

原创 switch_to及ret_from_sys_call控制任务的切换与返回

     当进程A在用户态下执行着,出现了系统调用(int 0x80),CPU转而执行_system_call(system_call.s L80)中断处理过程,     _system_call 保持了进程A在用户态时的现场信息,然后执行call _sys_call_table(, %eax, 4)指令,当执行完本指令时,进程     A请求的系统调用已经完成了,_system_call剩下的代码是该系统调用中断处理过程的退出阶段。     当执行到jne reschedule时,处于内核态的进程A希望主

2011-05-11 22:26:00 2258

原创 关于Run-Time Check Failure #2

     这个问题源自《The C Programming Language》P49 p3-2习题中,当输入一系列字符串后,再键入Ctrl - Z时,出现了。     代码:     #include #define MAXLINE 100int getLen(char s[], int lim);char* escape(char t[], char s[]);int main(){ int len = 0; char line[MAXLINE] = {'/

2011-05-09 17:33:00 1269

原创 关于clock()函数计时

<br />     clock tick:时钟计时单元(而不把它叫做时钟滴答次数),一个时钟计时单元的时间长短是由CPU控制的,<br />     一个clock tick不是CPU的一个时钟周期,而是C/C++的一个基本计时单位。<br /> <br />     clock函数:clock_t clock(); 这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间<br />     的CPU时钟计时单元 (clock tick)数,在MSDN中称之为挂钟时间(wal-cloc

2011-05-08 15:44:00 18136 2

原创 将一个unsigned型数据循环右移n位

     源自《The C Programming Language》P40 pr2-8:     编写一个函数rightrot(x, n),该函数返回将x循环右移(即从最右端移出的位从最左端移入)n(二进制)位后所得的值。     代码:     #include unsigned rightrot(unsigned x, int n);int main(){ unsigned num = 8; int cnt = 3; printf("%u/n", rightro

2011-05-04 17:31:00 4163

原创 将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变

<br />     源自《The C Programming Language》P40 pr2-6:<br /> <br />     编写一个函数setbits(x, p, n, y),该函数返回对x执行下列操作后的结果值:将x中从第p位开始的n个(二进制)位设置为<br />     y中最右边n位的值,x的其余各位保持不变。<br /> <br />     代码:<br />     #include <stdio.h>unsigned setbits(unsigned x, int p,

2011-05-03 21:24:00 5393

原创 将字符串s1中任何与字符串s2匹配的字符都删掉

<br />     源自《The C Programming Language》P38 pr2-4:<br /> <br />     编写函数squeeze(s1, s2),将字符串s1中任何与字符串s2中字符匹配的字符都删除。<br /> <br />     代码:<br />     #include <stdio.h>#define MAXLINE 100char s[MAXLINE] = {'/0'}; //用于存储经过squeeze处理后的字符串char* sque

2011-04-29 15:47:00 3881

原创 将由16进制数字组成的字符串转换成与之等价的整形值

<br />     源自《The C Programming Language》P37 pr2-3:<br /> <br />     编写函数htoi(s),把由16进制数字组成的字符串(包含可选的前缀0X或0x)转换成与之等价的整形值,<br />     字符串中允许包含的数字包括:0 ~ 9, a ~ f,A ~ F。<br /> <br />     参考代码:<br />      #include <stdio.h>#define YES 1#define NO 0

2011-04-28 20:24:00 6986 1

原创 任务0的内核堆栈,用户堆栈

     描述任务0的内核堆栈和用户堆栈是如何产生的:     linux0.11系统共使用了4种堆栈:系统初始化时临时使用的堆栈;供内核程序自己使用的堆栈(内核堆栈),只有一个,位于系统     地址空间固定的位置,也就是后来任务0的用户态堆栈;每个任务通过系统调用,执行内核程序时使用的堆栈,也即任务的内核态     堆栈,每个任务都有自己独立的内核态堆栈;任务在用户态执行的堆栈,位于任务(进程)地址空间的末端,即任务的用户态堆栈。     从head.s程序起,系统正式在保护模式下运行,此时堆栈段被设置

2011-04-28 11:40:00 1974

原创 计算char,short,int,long类型变量的取值范围

<br />     源自《The C Programming Language》P28 pr2-1:<br /> <br />     编写一个程序以确定分别由signed及unsigned限定的char,short,int,long类型变量的取值范围。<br /> <br />     参考代码:<br />     #include <stdio.h>#include <limits.h>#include <float.h>int main(){ printf("the r

2011-04-27 15:59:00 10509

原创 删除C语言程序中所以的注释语句(有疑问)

     源自《The C Programming Language》P25 p1-23:     编写一个删除C语言程序中所以的注释语句。要正确处理带引号的字符串和字符常量。在C语言中,注释不允许嵌套。     参考代码:     #include void rcomment(int c);void in_comment();void echo_quote(int c);int main(){ int c, d; while((c = getchar()) !=

2011-04-26 17:21:00 5384 2

原创 把较长的输入行“折”成短一些的两行或多行

     源自《The C Programming Language》P25 pr1-22:     编写一个程序,把较长的输入行“折”成短一些的两行或多行,折行的位置在输入行的第n列之前的最后一个非空格符之后。     要保证程序能够智能地处理输入行很长以及在指定的列前没有空格或是制表符的情况。     参考代码:     #include #define MAXCOL 10 //输入行的折行位置,即输入行的第n列 //程序将在输入行的每一处第n列之前对该输入

2011-04-25 21:04:00 2872 3

原创 将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止位的地方

     源自《The C Programming Language》P25 pr1-20:     编写程序detab,将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止位的地方。假设     制表符终止位的位置是固定的,比如每隔n列就会出现一个制表符终止位。n应该是变量还是常量呢?     参考代码:     #include #define TABINC 8 //定义每个TABINC(8)个位置会出现一个制表位int main(){ int c, nb, p

2011-04-22 10:19:00 4998 9

原创 删除每个输入行末尾的空格,制表符,并删除全空格行

     源自《The C Programming Language》P22 pr1-18:     编写一个程序,删除每个输入行末尾的空格,制表符,并删除完全是空格的行     代码:     #include #define MAXLINE 10int getLine(char s[], int lim);void copy(char to[], char from[]);int calcLen(char s[]);int main(){ int len

2011-04-20 20:35:00 4906 1

原创 读入一组文本行,打印最长的文本行

     源自《The C Programming Language》P29     从终端读入一组文本行,并将最长的文本行打印出来     代码:     #include #define MAXLINE 1000 //允许输入行的最大长度#define LIM 8int getline(char line[], int maxline);void copy(char to[], char from[]);int main(){ int i, j;

2011-04-19 21:17:00 2825 1

原创 linux0.11 引导启动程序目录boot/分析

     boot/包含三个汇编文件:bootsect.s,setup.s,head.s。bootsect.s程序是磁盘引导块程序,编译后会驻留在磁盘的第一个扇区中(引导扇区,0磁道,0磁头,第一个扇区),在PC加电ROM-BIOS自检后,将被BIOS加载到内存0X7C00处执行。setup.s程序主要用于读取机器的硬件配置参数,把内核模块system移动到适当的内存位置处。head.s程序会被编译连接在system模块的最前部分,主要进行硬件设备的探测设置和内存管理页面的初始化设置。     BIOS:P

2011-04-18 11:44:00 827

原创 在输出终端中消除多余空格

<br />     来源于《The C Programming Language》的一道习题(P13,PR1-9):<br />     编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替<br />     自己实现:<br />     <br />     #include <stdio.h><br />     int main()<br />     {<br /><br />         int c, flag;<br />         flag = 0;<br />

2011-04-14 15:53:00 897

原创 打印输入中单词长度的直方图

   源于《The C Programming Language》P17 pr1-13:   编写一个程序,打印输入中单词长度的直方图。   /**************************************************************直方图定义:n:某个长度单词出现的次数(长度为4的单词出现了9次,则n = 9)M:出现最频繁的长度的次数H:定义的直方图的最大长度(本例中为MAXHIST)*********************************

2011-04-14 15:28:00 5991 5

原创 统计输入中的行数,单词数,字符数

<br />   源于《The C Programming Language》P14的一道例题:<br /> <br />   统计输入中的行数,单词数,字符数(单词的定义:其中不包括空格,制表符,换行符的字符序列)     <br /> <br />     #include <stdio.h><br /> <br />     #define   IN      1<br />     #define   OUT   0<br /> <br />     int main()<br />     {<b

2011-04-14 10:30:00 1920

原创 受启迪了

<br />     最近看了写技术BLOG,受了点启发,认识到了写技术BLOG是一种很好的思考总结的方式。对于我这个原生性的挫折感较强的人来说,希望BLOG能给我带来快乐和自信。<br />     近期的BLOG基本上专注于LINUX内核和C语言的锤炼,这是我目前的感兴趣点和特别渴望提升的地方,我希望半年,一年,若干年后回头看博客,让我觉得积累了很多知识,既然选择了这条路,就要勇于攀登,敢为人先。<br />     这基本上可以看着我的在线读书笔记了(^_^),拼搏啊,时间不多了...

2011-04-13 15:38:00 768

原创 终于能调试0.11了

<br />         自从3天前成功的编译了0.11,运行后,看见bochs的模拟终端中出现的“#”提示符,着实让我激动了一下。然而随之而来的就是不能调试,重新编译bochs加入调试功能,没有报错,但运行时一直是“Loading System...”。我疯狂地查资料,怀疑ubuntu9.04上的一切,从gcc版本,到bochs版本,当是否真正成功地编译了bochs,当我排除了其他一切出错可能,将目标锁定到最后一项时,我意外地发现不能解压bochs-2.3.5.tar.gz时,只好将包拷贝到windo

2011-02-28 20:35:00 475

原创 第一篇博文

<br />          csdn申请到好久了,今天才写第一篇博文,我想这将会是我以后的技术博客了,花了3天时间终于在ubuntu的vmware上把linux0.11编译运行起来了,看着自己一手配置,修改,调试的linux0.11转起来了,我开心的笑了,虽然界面很糙,功能也不全,<br />但我觉得它让我小小的激动了一下,我的linux内核之路走了才半年,我会一直走下去的。目前目标就是钻研linux0.11,加油吧,能做自己喜欢的事情,还有比这更快乐的吗?

2011-02-24 20:10:00 515

Intel Architecture Software Developer's Manual - x86编程手册

本手册是进行系统级程序开发的必备手册,英文原版,详细,清晰

2011-06-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除