04 2011 档案
将字符串s1中任何与字符串s2匹配的字符都删掉
摘要:源自《The C Programming Language》P38 pr2-4: 编写函数squeeze(s1, s2),将字符串s1中任何与字符串s2中字符匹配的字符都删除。 代码:main.c 1 #include <stdio.h> 2 3 #define MAXLINE 100 4 5 char s[MAXLINE] = {'\0'}; //用于存储经过squeeze处理后的字符串 6 char* squeeze(char s1[], char s2[]); 7 int any(char s1[], char s2[]); 8 9 int main()10 阅读全文
posted @ 2011-04-29 23:47 将军之盾 阅读(1216) 评论(0) 推荐(0)
将由16进制数字组成的字符串转换成与之等价的整形值
摘要:源自《The C Programming Language》P37 pr2-3: 编写函数htoi(s),把由16进制数字组成的字符串(包含可选的前缀0X或0x)转换成与之等价的整形值, 字符串中允许包含的数字包括:0 ~ 9, a ~ f,A ~ F。 参考代码: main.c 1 #include <stdio.h> 2 3 #define YES 1 4 #define NO 0 5 6 int htoi(char s[]); 7 8 int main() 9 {10 11 char hex_str[] = "0x*1fe*";12 13 printf(& 阅读全文
posted @ 2011-04-29 04:24 将军之盾 阅读(1192) 评论(0) 推荐(0)
任务0的内核堆栈,用户堆栈
摘要:描述任务0的内核堆栈和用户堆栈是如何产生的: 1, linux0.11系统共使用了4种堆栈:系统初始化时临时使用的堆栈;供内核程序自己使用的堆栈(内核堆栈),只有一个,位于系统 地址空间固定的位置,也就是后来任务0的用户态堆栈;每个任务通过系统调用,执行内核程序时使用的堆栈,也即任务的内核态 堆栈,每个任务都有自己独立的内核态堆栈;任务在用户态执行的堆栈,位于任务(进程)地址空间末端,即任务的用户态堆栈 2, 从head.s程序起,系统正式在保护模式下运行,此时堆栈段被设置为内核数据段(0x10),堆栈指针esp设置成指向use_stack 数组的顶端,保留1页内存作为堆栈使用。head.s. 阅读全文
posted @ 2011-04-28 19:40 将军之盾 阅读(867) 评论(0) 推荐(0)
计算char,short,int,long类型变量的取值范围
摘要:源自《The C Programming Language》P28 pr2-1: 编写一个程序以确定分别由signed及unsigned限定的char,short,int,long类型变量的取值范围。 参考代码:main.c 1 #include <stdio.h> 2 #include <limits.h> 3 #include <float.h> 4 5 int main() 6 { 7 8 printf("the range of char: %d ~ %d\n", SCHAR_MIN, SCHAR_MAX); 9 printf(& 阅读全文
posted @ 2011-04-27 23:59 将军之盾 阅读(3217) 评论(0) 推荐(2)
删除C语言程序中所以的注释语句(有疑问)
摘要:源自《The C Programming Language》P25 p1-23: 编写一个删除C语言程序中所以的注释语句。要正确处理带引号的字符串和字符常量。在C语言中,注释不允许嵌套。 参考代码:main.c 1 /* 2 #include <stdio.h> 3 4 #define MAXLINE 1000 5 6 int getLine(char s[], int lim); 7 void copy(char to[], char from[]); 8 void delNotes(char **s, int row); 9 10 int main() 11 { 12 13 i 阅读全文
posted @ 2011-04-27 01:21 将军之盾 阅读(860) 评论(0) 推荐(0)
把较长的输入行“折”成短一些的两行或多行
摘要:源自《The C Programming Language》P25 pr1-22: 编写一个程序,把较长的输入行“折”成短一些的两行或多行,折行的位置在输入行的第n列之前的最后一个非空格符之后。 要保证程序能够智能地处理输入行很长以及在指定的列前没有空格或是制表符的情况。 参考代码:main.c 1 #include <stdio.h> 2 3 #define MAXCOL 10 //输入行的折行位置,即输入行的第n列 4 //程序将在输入行的每一处第n列之前对该输入行折行 5 #define TABINC 8 //'\t'等价8个空格 6 7 char line[ 阅读全文
posted @ 2011-04-26 05:04 将军之盾 阅读(648) 评论(1) 推荐(0)
将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止位的地方
摘要:源自《The C Programming Language》P25 pr1-20: 编写程序detab,将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止位的地方。假设 制表符终止位的位置是固定的,比如每隔n列就会出现一个制表符终止位。n应该是变量还是常量呢? 参考代码:main.c 1 #include <stdio.h> 2 3 #define TABINC 8 //定义每个TABINC(8)个位置会出现一个制表位 4 5 int main() 6 { 7 int c, nb, pos; 8 9 nb = 0; //到遇到制表符时,到达下个制表位需要的空格数10 阅读全文
posted @ 2011-04-22 18:19 将军之盾 阅读(1083) 评论(1) 推荐(0)
删除每个输入行末尾的空格,制表符,并删除全空格行
摘要:源自《The C Programming Language》P22 pr1-18: 编写一个程序,删除每个输入行末尾的空格,制表符,并删除完全是空格的行 代码: main.c 1 #include <stdio.h> 2 3 #define MAXLINE 10 4 5 int getLine(char s[], int lim); 6 void copy(char to[], char from[]); 7 int calcLen(char s[]); 8 9 int main()10 {11 12 int len, index, row;13 char line[MAXLINE 阅读全文
posted @ 2011-04-21 04:35 将军之盾 阅读(1447) 评论(0) 推荐(0)
读入一组文本行,打印最长的文本行
摘要:源自《The C Programming Language》P20 ex1.9: 从终端读入一组文本行,并将最长的文本行打印出来 代码: main.c 1 #include <stdio.h> 2 3 #define MAXLINE 1000 //允许输入行的最大长度 4 #define LIM 8 5 6 int getline(char line[], int maxline); 7 void copy(char to[], char from[]); 8 9 int main()10 {11 12 int i, j;13 int len; //当前行长度14 int maxn 阅读全文
posted @ 2011-04-20 05:17 将军之盾 阅读(467) 评论(0) 推荐(0)
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: PC上电后,执行ROM-BIOS中0XFFFF0处代码,将编译后的bootsect模块加载到0X7C00. 阅读全文
posted @ 2011-04-18 19:44 将军之盾 阅读(414) 评论(0) 推荐(0)