
源码分析
woshiyilitongdouzi
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ruby049源码分析_string.c05.txt
ruby049源码分析_string.c05.txt今天有个头痛的玩意。matz实现了类似shell的tr命令。如echo "1234" | tr '12' 'ab'结果为:"ab34"但matZ先来一个结构体。struct tr { int last, max; char *p, *pend;} trsrc, trrepl;这什么玩意儿呀。我有些读不下去了。现在想来,还是年轻时脑袋灵活些。也许,我想,应该在大学中,当学生学完C,和数据结构这两门课程后,就应该鼓励他们读源...原创 2020-10-15 10:18:08 · 208 阅读 · 0 评论 -
ruby049_string.c分析03
ruby049_string.c分析03static VALUEFstr_rindex(str, args) struct RString *str; VALUE args;{ struct RString *sub; VALUE initpos; int pos, len; char *s, *sbeg, *t; if (rb_scan_args(args, "11", &sub, &initpos) == 2) { ...原创 2020-10-15 09:53:26 · 194 阅读 · 0 评论 -
ruby049_string.c源码分析2
今天接着分析ruby049中string.c这个源程序,刚才忽然想,如果我教学生学软件,我想,应该把ruby049的源码当成作业,让学生课余学着去读源码,并进行交流。我现在才开始读源码,是不是太晚了些。不多想了,开始正题。static charstr_next(s) char *s;{ char c = *s; /* control code */ if (c < ' ') return 0; /* numerics */ if ('0...原创 2020-10-15 09:03:45 · 207 阅读 · 0 评论 -
ruby049源码分析_string.c文件
ruby049源码分析_string.c文件昨天写了array.c的文件中各函数的解读,下班后,在床上就进行回顾。发现真正写一遍后,自己思维更清楚了。就是说,象一本书《59秒》所言,倾说无益,书写才有效果。把知识点自己写下来,自己理解得更深入了。所以今天接着来分析string.c文件,因为字符串我使用得也较多,算是稍微熟悉一些。一、初始化函数先看结构体struct RString { struct RBasic basic; UINT len; char *ptr;...原创 2020-10-14 08:49:38 · 211 阅读 · 0 评论 -
gawk1.01源码分析08
gawk1.01源码分析08还有一个小时就要干活了。一直在断断续续的读gawk101的源码,我原来一个同事,特别会写awk脚本,我比不上他。我想,我要超过他,就只能读源码了。在项目组干活时,有一天,我忽然想读开源的源码,我不太会搜索,请项目经理帮我找开源软件,他帮我找到了sed的源码,当时真时读得想吐,其中遇到getopt函数,根本就看不懂。于是我放弃了。后来,自己就找到了gawk101的源码。因为我对awk熟悉一些。我比较喜欢看书,因为perl的作者说,他是因为遇到一个问题,用awk解决不了,于是原创 2020-10-13 10:15:34 · 178 阅读 · 1 评论 -
ruby049源码解读之array.c文件
ruby049源码解读之array.c文件昨天半夜睡不着,就起床写了一博文,写完后,继续睡觉。感觉还是有些迷糊。晚上还是要好好睡才是。今天我接着说说array.c文件。我是在linux下读程序,但写文字还是在windows下。那个ubuntu下五笔输入法没弄好。这个程序中最末尾是Init_Array(){ C_Array = rb_define_class("Array", C_Object); rb_include_module(C_Array, M_Enumerable);...原创 2020-10-13 08:59:58 · 364 阅读 · 0 评论 -
读简单的源码1-6.c
读简单的源码1-6.c最近还是经常读gawk1.01,grep的代码,感觉grep的代码还是比较好读,毕竟比较简单,如果结合《精通正则表达式》来读,就基本上能理解了。但gawk就复杂了,要懂bison,如果不懂这个,你C语言来通,还是不能串起来。所以要补充编译原理的知识。最近还想读linux0.11的源码。感觉还是要把汇编搞通,才是。于是,手头就找些简单的代码来读。现在感觉,如果不看到代码,心里就有些慌。使用软件时,也希望能是开源的。这样,就更有控制的感觉。今天读了一段代码。感觉很是难懂。关键是其原创 2020-09-25 18:47:57 · 120 阅读 · 0 评论 -
《数据结构》线性表伪码变代码
《数据结构》线性表伪码变代码前几天读ruby049中,array.c时,发现和数据结构课本上的实现很像。于是今天就把严教授课本上的伪码输入到计算机中,进行了调试。代码如下:#define LIST_INIT_SIZE 100#define LISTINCE 10#include<stdio.h>#include<stdlib.h>typedef int El...原创 2020-03-24 11:32:08 · 441 阅读 · 0 评论 -
oz grep源码分析
oz grep源码分析今天在笔记本上折腾ubuntu18,真是很好玩。配置低的本上,装ubuntu,真划算。原来4G跑win10总是慢得不行,现在跑linux,感觉还是很快的。我在本子上读regex.c这个文件,一个地方卡住了。 for (p = pat; *p; p++) { lp = mp; switch(*p) { case...原创 2020-03-23 13:06:16 · 244 阅读 · 0 评论 -
分享我修改后的一些源码
分享我修改后的一些源码我有时觉得现在的时代真好。有电脑可以用,有书可以读。而且有那么多的开源代码可以供自己研究。我想,或许,这就是我们真正的天堂了。我原来学习时,偏重于读书,很少写代码,导致自己水平一直不高,现在我改变思路,以读源码为主,以写代码为辅助,再辅以之读书,感觉水平在慢慢上升。因此,我把自己觉得好的代码,就上传上去,让后来的人有一些帮助。因为有的人,可能没想过读源码,因为在win1...原创 2020-03-23 08:37:01 · 457 阅读 · 0 评论 -
如何在大脑中模拟代码运行
如何在大脑中模拟代码运行昨天,终于在笔记本上安装好了ubuntu,这次没有使用虚拟机。这样,可以在ubuntu中使用图形界面相关功能了。在win10下通过wsl使用ubuntu,不能使用图形界面,感觉功能很受限。心里一想起这事,就觉得很兴奋。但睡在床上,不想起床,于是就把自己读过的代码在大脑中进行回忆。我比较喜欢的是oz写的grep程序,因为有一本书《精通正则表达式》,这本书,讲得很透,我...原创 2020-03-23 07:53:31 · 642 阅读 · 0 评论 -
安装ubuntu18
安装ubuntu18前几天,因为执行编译后的ruby0.49后, 一旦执行,就报coredump错误,于是就想,因为在win10下,wsl一个ubuntu,因为生成不了core文件,于是想,还是在虚拟机下安装一个完整的ubuntu,再生成coredump文件,这样,调试一下,看到底是哪个地方去错了。我把一万多个警告错误好不容易去掉了。这要不能执行,真不甘心呀。网上有人说,win10下,可以...原创 2020-03-23 07:52:49 · 250 阅读 · 0 评论 -
《软件随想录》读后感
《软件随想录》读后感我特别喜欢买书,有时找遍京东,居然发现没有新出什么好的计算机书籍。真的。joel说软件这本书,我当时买的时间是2008年前后,现在重印了,于是趁着半价,就又购了一本。我买的是第一本,读起来,很有感触。尤其是谈到C语言字符串的处理,因为我读源码,被字符串处理弄得痛苦无比。像oz的grep中,regex.c中,对正则表达式进行解析,再用解析后的中间代码去进行匹配。总之,我快要被...原创 2020-03-21 17:30:38 · 208 阅读 · 0 评论 -
ruby.c源码分析
ruby.c源码分析代码编译不了,但生活还是要继续的。我今天就读ruby.c。我快速的浏览了一下文件。因为我执行时./ruby -vhelloworld01[hello] ruby - version 0.49 (18 Jul 94)yang@DESKTOP-V9HS3B6:~/ruby049/ruby$也就是说,-v参数是可以执行的。于是我去找了,并进行了修改。static ch...原创 2020-03-21 17:02:07 · 361 阅读 · 0 评论 -
读代码时,写测试代码验证自己的想法
读代码时,写测试代码验证自己的想法这两天为了编译ruby0.49,可是费尽了心思。后来,发现,为了再现编译中的错误,最好是自己写测试代码。一。gdbm调试因为ruby049中有一个文件dbm.c,为了编译它,需要安装gdbm。从来没有用过dbm。于是在网上学安装,并在网上找文件,再进行编译,等本地小程序编译后,再修改Makefile,dbm.c#include <unistd.h&...原创 2020-03-21 16:47:53 · 202 阅读 · 0 评论 -
ruby0.49编译
ruby0.49编译从前天开始,又开始编译ruby0.49,过程痛苦得不想说了。先是,dbm.c的编译。 老是出现找不到lgdbm-compat。我后来,干脆先写测试程序,在网上抄一个。再进行编译。还是报错。于是在网上找资料。于是重新安装gdbm。各种折腾。后来,发现编译时,我把下划线写成了减号。应该这样写 gcc t1.c -lgdbm -lgdbm_compat但安装时,可以这样...原创 2020-03-21 16:33:14 · 164 阅读 · 0 评论 -
ruby0.49编译问题
ruby0.49编译问题编译时,报了许多错,先解决其中之一。array.c: In function ‘ary_new2’:ruby.h:119:38: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]#define NEWOBJ(obj,type) type *obj = (t...原创 2020-03-19 21:01:39 · 215 阅读 · 0 评论 -
ruby0.49 array.c源码阅读
ruby0.49 array.c源码阅读我想,应该叫源码阅读,自己随心所欲的读。就像读小说一样。因为我比较喜欢ruby语言,读新版本的,代码量太大,不划算。为此,找了最早版本的。代码量少些。读array.c源码,今天基本上把代码过完了,而且基本都理解了。数组中,好像有三个重要的要素arr->len 存储数组中实际的元素个数,下标从0开始。arr->capa 存储数组中,目前分...原创 2020-03-19 20:27:29 · 145 阅读 · 0 评论 -
coreutils-4.5.1源码阅读
今天忽然想,我目前的功力去勉强读gawk1.01,ruby049的源码,都有些勉强,真的。因为涉及到编译器的许多知识。为此,还是读简单些的,如coreutils的源码。于是,我打开了coreutils,现在读的时候,我第一选择是想多读些文档,最好是帮助文件,但网上下载,太慢了。于是,忽然想,coreutils文件夹下应该也有的。于是,在doc文件夹下,果然发现了一个,有些长。但也能读。...原创 2020-03-18 16:17:39 · 494 阅读 · 0 评论 -
oz grep.c源码阅读有感想
oz grep.c源码阅读有感想我最早开始读源码,就是读了有一个人分析oz的grep.c源码的文章,我读了博客后,感觉不过隐,继续下载了oz的源码,自此,就再开始读coreutils等源码。但陆续读代码,其中grep.c中的正则表达式大体逻辑懂了,但其中关于位图的一些操作,一直没有弄明白。昨天,我想,再回过头来读grep.c的源码,开始下载,使用wget总是下载不了。于是,直接使用网页打开,再...原创 2020-03-18 15:03:04 · 219 阅读 · 0 评论 -
gawk1.01源码分析——进行调试
gawk1.01源码分析——进行调试因为疫情之故,天天在家。前段天天读小说,后来,觉得,还是读源码,至少让精力有地方发泄。于是,又重新读源码。虽然很久没读,但发现,以前读过,现在再读,还是有种熟悉的感觉。但,发现光读代码,而代码跑不起来,没有感觉。还是要把代码编译,测试,再修改,再编译,执行后看修改是否产生的效果。因此,又捡起原来曾编译通过的代码。再开始。./gawk --version...原创 2020-03-08 10:27:35 · 130 阅读 · 0 评论 -
gawk awk3.c源码分析
gawk awk3.c源码分析本来昨天要完成的,昨天晚上睡得太早,就忘记了,今天打开电脑,第一件事,就是把这篇完成。这个文件主要完成一些内部函数的定义。先定义了一些外部变量,就于对应awk程序中的NF,FS,RS,NR,FILENAME,OFS,ORS,OFMT之类。inin_vars() 这个函数主要用于完成对NF,FS,RS,NR,FILENAME,OFS,ORS,OFMT变量的...原创 2019-12-22 08:59:54 · 222 阅读 · 0 评论 -
gawk awk1.c源码分析
gawk awk1.c源码分析今天接着读代码。前段时间迷上读网络小说,用kindle看小说,看得天昏地暗。读小说锻炼了阅读速度。星期五购买了几件打折的衣服。我要好好读代码,把购衣服的价值创造出来。言归正传。我用一台旧的笔记本不上网,只用于在上面写代码。因为上面只有gawk的源码,没有拷coreutils的源码,所以就读gawk的了。今天看的时候,感觉把这篇基本全部看懂了。个别细节也懂了。下...原创 2019-12-21 19:23:08 · 308 阅读 · 0 评论 -
gawk1.01源码awk3.c分析
gawk1.01源码awk3.c分析我一边读源码,一边把自己的一些想法写出来。我的笔记本外接了一个显示器。init_vars() 这个过程,对FS,NF,RS,NF,FILENAME,OFS,ORS,OFMT几个变量进行初始化。 其过程很有意思, FS_node=spc_var("FS",make_string(" ",1)); spc_var("FS",make_string...原创 2019-11-07 10:31:58 · 275 阅读 · 0 评论 -
gawk1.01源码分析——各文件功能
gawk1.01源码分析——各文件功能今天就各个文件的基本功能谈下我的理解。一、awk.h头文件先列出数据结构typedef struct hashnode HASHNODE;struct hashnode { HASHNODE *next; char *name; int length; ...原创 2019-11-07 09:52:56 · 183 阅读 · 0 评论 -
gawk1.01源码分析awk.y冲突了
gawk1.01源码分析awk.y冲突了yang@DESKTOP-V9HS3B6:~/gawk101/gawk$ echo "hello:ok" | ./gawk 'BEGIN { FS=":"}> {print $1,$2}'hello ok看到没,单独是可以执行的。但把awk指令写到文件中,再测试一下,其中t.awk内容如下:yang@DESKTOP-V9HS3B6:~/ga...原创 2019-11-06 11:01:24 · 170 阅读 · 0 评论 -
gawk1.01源码大体结构分析
gawk1.01源码大体结构分析昨天找gawk的选项,因为我想分析其调试过程。我想根据其debug的过程,来分析程序。发现在awk1.c中有-D选项,试一下,结果出现一大堆:yang@DESKTOP-V9HS3B6:~/gawk101/gawk$ echo "ok" |./gawk '{print $0}'okyang@DESKTOP-V9HS3B6:~/gawk101/gawk$ ech...原创 2019-11-05 07:06:54 · 136 阅读 · 0 评论 -
编译成功的gawk1.01源码上传了
编译成功的gawk1.01源码上传了世界上最幸福的事,就是把代码编译成功了。然后一个屏幕对代码进行编辑,另一屏幕,进行测试,立即看到效果。太爽了。今天,我把gawk1.01编译成功,我开始进行一些简单的测试,如从内置函数开始。如何测试呢?yang@DESKTOP-V9HS3B6:~/gawk101/gawk$ ./gawk 'BEGIN {print 2+3}'5yang@DESKTOP...原创 2019-11-04 18:36:29 · 141 阅读 · 0 评论 -
gawk1.01源码安装 续
gawk1.01源码安装 续今天是个好天气,我昨天发现有冲突,看了会书,还是不得要领,今天把冲突进行研究,发现Option 1, statements -> <Rule 24, tokens 2 .. 5> statements -> <Rule 22, empty>Option 2, statements -> <Rule ...原创 2019-11-04 17:57:04 · 264 阅读 · 0 评论 -
gnu awk1.01源码编译安装——续
gnu awk1.01源码编译安装——续这个双休日又把时间耗在了gawk1.01的编译安装了,我原来好象曾编译过,但当时对代码的理解不深刻,编译过后,就没如何读代码了。而且我的机器环境又多,当时好像是在windows下安装bison,不知如何在ubuntu下编译成功了。今天接着开始在ubuntu下安装。还是像原来一样,报了无数的错误,因为根本生成不了可执行程序,于是,我就把gcc进行降级安装...原创 2019-11-04 06:57:16 · 765 阅读 · 0 评论 -
gem algorithms010 读源码后开始写
gem algorithms010 读源码后开始写今天接着想把稀疏矩阵的几个算法弄一下,先弄转置,我不知如何在ruby中存储结构体,于是用struct,写得很差,总算弄出一个。n=Struct.new("JUCHEN",:mu,:nu,:tu,:arr)data=[[1,2,12],[1,3,9],[3,1,-3],[3,6,14], [4,3,24],[5,2,18]...原创 2019-10-12 07:27:28 · 125 阅读 · 0 评论 -
gem algorithms010 读代码后试着写
下面是子串模式匹配程序。def Index(s,t) i=0 j=0 while i<=s.size-1 and j<=t.size-1 if s[i]==t[j] i +=1 j+=1 else i=i-j+2 j=1 end end if j>t.size-1 ...原创 2019-10-12 06:32:45 · 125 阅读 · 0 评论 -
gem algorithms010 读代码再开始学着写
gem algorithms010 读代码再开始学着写昨天因为弄不出增量序列的数据,所以没有写shell排序,今天想,先把增量序列手工写出来,再写shell排序,代码如下:def ShellInsert(arr,dk) (dk..arr.size-1).each do |i| r0=arr[i] j=i-dk while j>=0 and r0<a...原创 2019-10-12 06:31:32 · 121 阅读 · 0 评论 -
gnu coreutils4.5.1 源码分析感想:luck read the source
今天想写一段关于读源码的感想。首先源码并不是难于上青天,只要努力,我也能看懂。当然路上会遇到很多困难。比如英语看不懂,比如基础差。这都不是问题,关键是你要迈出这第一步。其它的问题都让它在过程中解决,比如英语不懂,没问题,下载必应词典,复制整段英语后翻译,比如基础差,对相关库不理解,不要紧,看多了,就知道怎么一回事。没吃过猪肉,总看到过猪走路。同时,在看的过程中,再看看C语言课本。就这么一回事,先混...原创 2018-03-07 09:53:18 · 223 阅读 · 0 评论 -
gnu coreutils utime.c 源码分析
该函数显示系统时间。先看main根据参数个数,调用uptime函数。 switch (argc - optind) { case 0: /* uptime */ uptime (UTMP_FILE); break; case 1: /* uptime <utmp file> */ uptime (argv[optind]); ...原创 2018-03-07 11:23:12 · 228 阅读 · 0 评论 -
gnu coreutils chgrp.c 源码分析
这个函数用于改变用户名、用户组之类。用户管理这块不太熟悉,所以要多做试验,创建几个用户来试验一下。先看main.c为存储选项值,用了一个结构体 struct Chown_option chopt;先初始化结构体 chopt_init (&chopt);再分析选项,找出结构体的值 while ((optc = getopt_long (argc, argv, "Rcfhv", long_op...原创 2018-03-07 11:24:35 · 169 阅读 · 0 评论 -
gnu coreutils rm.c 源码分析
先看main.c,同样,先定义一个struct rm_options,用于存储命令选项,先初始化 rm_option_init (&x);接着,分析选项,向结构体赋值。 while ((c = getopt_long (argc, argv, "dfirvR", long_opts, NULL)) != -1) { switch (c) { case 0: /* Lon...原创 2018-03-07 11:44:01 · 293 阅读 · 0 评论 -
gnu coreutils echo.c 源码分析
打开echo.c,发现代码写得好长呀。在我的心目中,处理选项,然后就直接输出呀。只要这一段就够了 { while (argc > 0) { fputs (argv[0], stdout); argc--; argv++; if (argc > 0) putchar (' '); } }为什么这么长呢?echo -n ...原创 2018-03-07 11:52:40 · 204 阅读 · 0 评论 -
gnu coreutils源码 cat.c分析
今天开始写博客。尝试着分析源码。不写那么多废话,全写自己对源码的理解。读了cat.c,网上找到了一个好文章:http://blog.youkuaiyun.com/mingdaotang/article/details/50446350可惜,关键地方还是没看懂。引用作者的一段:字符映射要实现这个功能,就无法再简单的整页读写数据,中间需要再加一个处理的步骤:按整页读出数据。逐个字符的遍历输入缓冲区(inbuf),...原创 2018-03-01 21:18:05 · 339 阅读 · 0 评论 -
gnu coreutils源码 pwd.c分析
想看SED的源码,把GETOPT.C看完了,硬是看不懂,后来,按作者的调试程序,进行编译,再慢慢调,看把GETOPT.C看完,但正则表达式的那段又看不懂,看了一个1000行左右的正则表达式,还是代码数量少的容易看懂。于是打开PWD.C,这个代码真容易看。前面是USAGE,我忽略掉。MAIN主程序中,就一句重要的话XGETCWD(),这个程序很容易懂。可惜我想单独编译这个程序,编译不出来,如果能单独...原创 2018-03-01 21:24:40 · 342 阅读 · 0 评论