
coreutils
woshiyilitongdouzi
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
coreutils4.5源码expand.c分析
coreutils4.5源码expand.c分析感觉这个代码真复杂。本来以为很简单的一个命令,就是把tab转为空格。但你看。echo -e "ab\td\tx" | ./expand -t 2 | od -cb0000000 a b d x \n 141 142 040 040 144 040 170 0120000010第二个tab只转为了1个空格。我以为是我看错了,又执行几次:echo -e "ab\td\tx" | ./expa...原创 2020-09-05 18:00:23 · 294 阅读 · 0 评论 -
coreutils4.5.1源码阅读读后感20200905
coreutils4.5.1源码阅读读后感20200905先把源码的长度进行排序,wc -l *.c | sort -n > source.txt并写到一个文件中,如图: 2 ls-dir.c 2 ls-ls.c 2 ls-vdir.c 7 md5.c 7 sha1sum.c 71 false.c 71 true.c 74 sync.c 82 pwd.c读代码时,打开这个文件,从长度最小的依次向...原创 2020-09-05 11:38:12 · 166 阅读 · 0 评论 -
coreutils4.5源码expr.c分析——漂亮的代码
coreutils4.5源码expr.c分析——漂亮的代码有一本书叫《漂亮的代码》,其中选择了一些写得漂亮的代码,重点加以分析,如只用30多行程序实现正则表达式。今天反复读expr.c,感觉这个代码写得真漂亮。比如:static char *inttostr (intmax_t i, char buf[INT_STRLEN_BOUND (intmax_t) + 1]){ uintmax_t ui = i; char *p = buf + INT_STRLEN_BOUND (intmax_t)..原创 2020-09-04 16:45:21 · 257 阅读 · 0 评论 -
coreutils4.5源码读后感20200904
coreutils4.5源码读后感20200904为了在vim下写代码,有时写好代码后,要保存,退出编辑器,回到命令窗口,再编译执行。为了不退出vim进行编译,我在网上找程序员vim配置文件,发现一个高人,总结了如下三句话:git clone https://github.com/chxuan/vimplus.git ~/.vimpluscd ~/.vimplus./install.sh真是超级爽。不过,如果要么直接在linux下读,要么在windows下读。如果你在win10下,进入ubuntu原创 2020-09-04 16:33:14 · 166 阅读 · 0 评论 -
coreutils4.5源码expr.c读后感20200903
coreutils4.5源码expr.c读后感20200903很长一段时间没有写博客了。因为很久一段时间没有读源码了。这两天,又开始读。感觉还是要从基础的读起,一下子读ruby0.49等编程语言的源码,哪怕是awk1.01的源码,都太复杂了。饭还是要一口一口的吃。原来还想用平板看代码,现在发现,还是要用笔记本看,因为读代码时,要调试,要编译,再进行测试,根据结果来验证自己的想法是否正确。当然,前期也可以只是看,但效果不是太理想。还是要手摸键盘,一边看,一边改代码,编译后,执行一把,才能看到效果。所以,原创 2020-09-04 16:31:50 · 181 阅读 · 0 评论 -
coreutils-4.5.1源码阅读
今天忽然想,我目前的功力去勉强读gawk1.01,ruby049的源码,都有些勉强,真的。因为涉及到编译器的许多知识。为此,还是读简单些的,如coreutils的源码。于是,我打开了coreutils,现在读的时候,我第一选择是想多读些文档,最好是帮助文件,但网上下载,太慢了。于是,忽然想,coreutils文件夹下应该也有的。于是,在doc文件夹下,果然发现了一个,有些长。但也能读。...原创 2020-03-18 16:17:39 · 494 阅读 · 0 评论 -
coreutils5.0 tsort.c源码分析
coreutils5.0 tsort.c源码分析昨天很冷,没有写博客。今天太阳出来,开始写。我很喜欢看sort,comm,seq,diff,uniq之类的程序,因为其中用到一些算法,而且与内核关系不大,不象chown之类,需要调用系统调用,而我能系统调用不熟悉,因此,昨天就打开了tsort.c的源码,但读了一点就看书去了,今天接着看,感觉有点眉目了。因为我没用过tsort程序,于是百度一下...原创 2019-12-19 10:10:28 · 307 阅读 · 1 评论 -
coreutils5.0 paste.c源码分析
coreutils5.0 paste.c源码分析时间过得真快,一晃又到中餐时间了。我要赶紧再写一篇。先说paste的用法。paste -s把每个文件变成一行,再把两个文件合在一起。paste -s -d: a1 a2此时,a1中每一行末尾的\n用:来进行分隔。然后再看相应功能在程序中是如何实现的。先翻到main函数。serial_merge=0在getopt_long中,当分析...原创 2019-12-17 11:26:52 · 132 阅读 · 0 评论 -
coreutils5.0 unexpand.c源码分析
coreutils5.0 unexpand.c源码分析这个程序没有使用过。今天先测试一下用法。echo " bc haha " | ./unexpand | cat -t发现果然把空格转换成tab键了。而且,还有选项unexpand -a表示除文件行开头的空格转外,文件中间、末尾的空格也转为tabunexpand -t 4把连接的4个空格转为t...原创 2019-12-17 10:57:12 · 101 阅读 · 0 评论 -
coreutils5.0 split.c源码分析
coreutils5.0 split.c源码分析接着打开split.c,先测试一下用法。a.3的内容如下12345./split -l 3 a.3xaa123xab45看来,按行拆分好理解的。于是,我就找按行拆分的 方法。先从头到尾逛一下,翻到main时,先从getopt分析命令行参数中,找到如何分析-l发现,把行数存储到accum中,并split_type=t...原创 2019-12-17 10:00:44 · 131 阅读 · 0 评论 -
coreutils5.0 fold.c源码分析
coreutils5.0 fold.c源码分析先说点闲话,感觉打开电脑,能静下心来读源码,是一种幸福的生活。昨天把办公桌上的卫生整理了一下,然后在win10的笔记本上安装coreutils5.0,忽然发现编译不了。编译到seq.c时就报错误了。我心想,还是把那些能编译出来的代码读一下,我不想把时间花在调试环境上。于是就打开,发现win10下的ubuntu很不好读代码,那个注释的字体太暗了。还是...原创 2019-12-17 09:31:22 · 173 阅读 · 0 评论 -
coreutils5.0 factor.c源码分析
coreutils5.0 factor.c源码分析今天接着想读读代码行数少的程序,wc *.c | sort -n| more这样一选择,想读读tee.c可,发现有-a选项,因为想测试一下。a.3中有内容122echo "hello" | ./tee -a发现tee.c居然没有编译成功。原来前面seq.c就编译不成功,报floor错误,我想应该是加编译选项-lm,可我把凡是用到g...原创 2019-12-16 11:15:45 · 167 阅读 · 0 评论 -
coreutils5.0 echo.c源码分析
coreutils5.0 echo.c源码分析随便翻翻,因为前几天学习了sort的用法,想读读sort.c的代码,一打开,完全看不懂,因为数据结构中,内部排序我懂了,但外部排序我不懂,看样子,作者好像是用到了外部排序。于是果断的略过。然后再找代码少的来读,打开echo.c的代码。代码是简单的,如果没有参数就只是把参数直接打印出来。但如果加选项,象./echo -e "a\tbb"是在...原创 2019-12-16 10:27:22 · 243 阅读 · 0 评论 -
coreutils5.0 uniq.c源码分析
coreutils5.0 uniq.c源码分析运动了一会儿,让身体动起来,这样更有利于思维活跃起来。接着打开uniq.c的源码。原来,总认为代码太长,今天,先不管长度,把代码从头到尾翻一次,找出其核心的算法,一旦能从宏观上理解处理算法,至于细节,就只能慢慢看了。毕竟C语言是一种相当细的语言。先弄个测试文件a.3内容如下1223334然后进行测试./uniq a.3并加上...原创 2019-12-16 09:51:19 · 240 阅读 · 1 评论 -
coreutils5.0 comm.c源码分析
coreutils5.0 comm.c源码分析很久没有读代码了,双12为改善环境,网购了两个乐哥支架,把显示器弄得更人性化,于是又开始读源码。这次,不太急了,因为我知道源码总是读不完的,而且读完源码后,再干什么呢?好象也还是读源码,那为什么不把心思放在当下,好好的享受一下读源码的乐趣呢。而且,我原来读源码时,总是要拷一些代码出来,后来,发现意义不大,我要从宏观上理解代码,而一下拷出代码,也是...原创 2019-12-16 08:59:13 · 168 阅读 · 0 评论 -
gnu coreutils-4.5.1 split.c代码分析
split很有意思,我一个长文件按行或按字节数进行拆分。在awk中也有一个split函数,把字串拆分开一个数组中,如split("3-22-1981",dt,"/")有人讲,读代码时象lisp一样,(操作符,数1,数2)此处,split就像一个操作符,哈哈!读代码时,还是先把代码从头拉到尾,再从main开始慢慢分析。main前面那些水货,我先略过,直接看干货 switch (split_type...原创 2018-05-22 09:35:56 · 149 阅读 · 0 评论 -
coreutils4.5.1 uniq.c源码分析1
uniq.c这个文件其实没读懂,不过从程序中发现了几个支点,下次再细细品。第一。交换两行的写法。#define SWAP_LINES(A, B) \ do \ { \ struct linebuffer *_tmp; \ ...原创 2018-12-18 19:47:27 · 145 阅读 · 0 评论 -
coreutils4.5.1 expr.c 源码分析2
今天又开始读代码。前段时间看算法分析相关的书,搜集了不少算法相关书籍,感觉自己功力太浅,还是读读源码吧。好在,读小说,养成了快速读书的好习惯,再加不求甚解,把快速+不求甚解利用到读代码上,感觉也很有意思。今天重点翻了翻expr.c,这个源码,很有特色,首先启用debug功能。文档中有注释,Define EVAL_TRACE to print an evaluation trace. 我是通过...原创 2018-12-18 19:08:28 · 156 阅读 · 0 评论 -
coreutils-4.5.1 expr.c 源码阅读
在linux下试试五笔是否好用。感觉打字也还很快的。很久没有上csdn了,最近没有看源码了,回顾自己,感觉还是写代码太少,应该多写,多读。想来想去,感觉还是要看coreutils的代码,因为这些代码都简单,那些操作系统,编译器的代码量太大了,就算sed,awk,ruby早版本的代码量都太大,自己功力不够,所以还是回到这些小的代码。这几天,先学《unix编程环境》那人的做法,先把按程序行数排序的...原创 2018-12-18 18:37:06 · 206 阅读 · 0 评论 -
coreutils-4.5.1/dirname.c
coreutils-4.5.1/dirname.cbasename.c的作者留的名字是:fixme unknown,作者很幽默呀,名字都不留。也许作者真是觉得写程序就是好玩。名气算什么?当饭吃?有意思。刚才看了dirname.c,这个程序有意思的一个地方是,求目录名时,如"/usr/ab/ddd.txt"我原来以为是变成:"/usr/ab\0ddd.txt"呢,后来,发现是这样:len...原创 2018-10-18 10:05:52 · 141 阅读 · 0 评论 -
coreutils-4.5.1/basename.c 读源码的方法
coreutils-4.5.1/basename.c 读源码的方法为了按行数看代码的命令写错了,应该写成这样:ls -s *.c | sort -n -k1 | more我想,读源码,的最大方法,是要改于打开源码,开始读,只要开始了,方法总会有的。路虽远,行则达。有时,我感觉很急,你看,我翻ruby0.49时,想,这个代码我连编译都不成功,而且这么多代码没看懂,可新的版本又出来了。你有...原创 2018-10-18 09:46:27 · 236 阅读 · 0 评论 -
gnu coreutils-4.5.1 uniq.c代码分析
今天看了会书,有一人说,如果感兴趣,就会主动研究,就不会没有基础了,感觉很好玩。我对代码有兴趣,也不是零基础了。但每回看到他们的代码,我总是信息被打击,他们的代码写得真好。先把按行数显示代码的程序弄成一个脚本:wc -l *.c | sort -n -k1 | head -$1保存成一个文件,需要显示的行数作为参数传进来。比如保存为lsc.sh./lsc.sh 50就看到前50个代码量小的文件。u...原创 2018-05-21 22:10:25 · 196 阅读 · 0 评论 -
coreutils-4.5.1/false.c代码阅读
coreutils-4.5.1/false.c代码阅读自己还是要读源码,提长自己的功力。网上购C标准库,没有了。淘宝上二手书几百元一本,估计现在学c的人也多了。我真想读ruby0.49,可以连gcc都安装不上。没办法。还是读简单的。把看代码看成一种生活方法,不是为了在他人前装13。从最简单的看起cat *.c | wc -l |sort -n -k1先看false.c我最近不停安装g...原创 2018-10-18 09:05:22 · 147 阅读 · 0 评论 -
gnu coreutils-4.5.1 echo.c代码分析2
gnu coreutils-4.5.1 echo.c代码分析2这个代码今天又读一遍,感觉有些眉目了。比第一回看时,更有些眉目了。第一回看时,恨不得一下看完,马上理解。现在重读,感觉上就从容多了。反正后面也是读代码,那倒不如慢慢研读,好好把握当下呢。首先我见识了作者用宏的威力,把宏这样用,比如: if (argc > 0) {#if defined (V9_ECHO) 此处省略...原创 2018-05-30 07:08:22 · 167 阅读 · 0 评论 -
gnu coreutils-4.5.1 comm.c代码分析4
gnu coreutils-4.5.1 comm.c代码分析4昨天睡觉时,也在想writeline(),总为其中打印\t原因不解,当时在想,为什么case 3:时,要在乎是否打印了only_file_1,only_file_2呢?想了一会,终于明白了。现把自己的理解说一下。writeline(*line,*stream,class)本质上完成的任务就是根据class的类别,向stream上打印...原创 2019-01-06 12:34:32 · 154 阅读 · 0 评论 -
gnu coreutils-4.5.1 comm.c代码分析3
gnu coreutils-4.5.1 comm.c代码分析3下班后,接着读代码,开始心情有些浮躁,冥想片刻,心静下来,再细心读,不觉忘记了烦恼。先准备两个文件cat test01内容为1234cat test023456再测试一下,comm test01 test0212 5 6 3 4大致输出如下,但代码writeline()就是理解不了。如果加打印语句,把case 3中的一个\t去掉,发...原创 2018-05-29 20:15:19 · 170 阅读 · 0 评论 -
gnu coreutils-4.5.1 comm.c 代码分析2
这个代码曾读过,当时曾为其比较算法而惊喜。是的,作者写得真妙。就象一队男人和一队女人进去玩,要求一男一女搭配,男人和女人一样高。先第一个男的和第一个女的比较,相等就进去,再比较下一对。如果第一个男的和女的高度不等,就让高的不同,让矮的下一位继续比较,因为数据是排过序的。今天接着复习,代码要经常看,才能看出味道来。我为writeline (const struct linebuffer *line,...原创 2018-05-29 07:33:15 · 140 阅读 · 0 评论 -
gnu coreutils-4.5.1 rmdir.c 代码分析2
早上起来,再看看代码。先看env.c这个代码搞不清头绪,于是加打印语句,主要是对getopt这个函数用法不清楚,上回读sed-1.8的代码时,没有吃透getopt函数的代码。再读mkdir.c rm.c感觉意思有大。昨天看了rmdir.c感觉其中对-p参数的处理很有意思。先举个例子。在当前目录下建立一个文件夹。mkdir -p a/b/c如果rmdir a/b/c只会删除c文件夹。如果rmdir...原创 2018-05-29 06:34:24 · 143 阅读 · 0 评论 -
gnu coreutils-4.5.1 factor.c 代码分析2
gnu coreutils-4.5.1 factor.c 代码分析2这几天想自己的目标,想来想去,先把这个包代码读完,当成目标。今天接着分析,我想,不应该把读代码当成任务,应该当成小说一样来品读,因此,应该在读代码的过程中享受到快乐。于是就慢慢重读,慢慢品。再读它,又有了别一番滋味。static intfactor (uintmax_t n0, int max_n_factors, uintmax...原创 2018-05-28 21:58:57 · 411 阅读 · 0 评论 -
gnu coreutils-4.5.1 wc.c代码分析
关了手机,定好机械闹钟,一心就把上午读的几个代码写写心得。wc 这个命令用得很熟悉了,看《flex and bison》中编写一个wc是很简单的,但打开看,wc.c命令也有几百行,596行。从main开始说起,我读代码是从头到尾看,我总想全部翻一次,再慢慢从尾到头分析。main中,根据传入文件的多少,如果传入多个文件,再打印一个合计信息。我验证了一下,果然如此。 for (; optind...原创 2018-05-22 09:36:52 · 389 阅读 · 0 评论 -
coreutils4.5.1 basename.c源码分析3
coreutils4.5.1 basename.c源码分析2前几天又重新读了basename.c对其中去掉后缀的那段,终于理解了。现总结如下;static voidremove_suffix (char *name, const char *suffix){ char *np; const char *sp; np = name + strlen (name); sp ...原创 2018-12-18 19:59:42 · 135 阅读 · 0 评论 -
coreutils4.5.1 dirname.c源码分析3
老调重弹,每次先按代码量排序,从行数少的程序开始读,总能有所收获。比如,在dirname.c中,我发现几条:第一、函数和括号可以用空格隔开,很奇怪。如voidusage (int status)在usage与(中有一个空格,我写了一个测试程序,也验证了猜想。第二、对字符取地址,真怪异! static char const dot = '.'; result = argv[1];...原创 2018-12-18 20:27:43 · 171 阅读 · 0 评论 -
gnu corenutils comm.c源码分析2
刚才又看了下,原来两个字串是用xmemcoll来比较大小。我原来以为是内容函数呢,跳进去一看,原来又用了memcoll,而memcoll又调用了strcoll网上百度一下,原来strcoll和strcmp差不多。真是怪。linux下,用ctags,再用vim读代码,真是爽呀。只要sudo apt-get install ctags再回到项目文件,生成tagsctags -R *不过,要在vim中执...原创 2018-03-03 22:23:09 · 149 阅读 · 0 评论 -
coreutils4.5.1 paste.c源码分析
coreutils4.5.1 paste.c源码分析今天天冷,几天没出门了。把新买的电热取暖器放在电脑房,然后拉上窗帘,开始读源码,学习linus,很好玩。paste这个命令有啥应用场景呢?先学习使用: head -n 100 a1 a2==> a1 <==this ishell owrld==> a2 <==this athpaste a1 a2th...原创 2019-01-02 10:06:41 · 238 阅读 · 0 评论 -
coreutils4.5.1代码阅读感想……代码编写的模式
coreutils4.5.1代码阅读感想……代码编写的模式看了ruby0.49,对比起来,感觉首先coreutils4.5.1能顺利的编译,真是太幸福了。虽然开始因为编译器版本高,折磨了一下,但后来,修改程序后,只要在src目录下sudo make一下,立即能看到效果,感觉太幸福了。而且coreutils都是些小程序,基本上一个文件对应一个命令,很容易理解。而象ruby0.49是个大程序了。理解...原创 2019-01-06 09:19:26 · 170 阅读 · 0 评论 -
coreutils-4.5.1 head.c源码分析03
今天真是把head.c看懂了。今天天真冷,我网上购了电热取暖器,没送到。但边听音乐,边读代码,感觉也很惬意。看代码不能着急,要慢慢看,也许就像有人讲的,郝培强讲的,一开始要慢,开始慢,后面才能越看越快。是的。看代码,开始要慢。不要着急。head有几个选项-n 行数-c 字节数-q 不打印文件名-v 打印文件名先把命令用法搞明白。这是重要。 ./head -q -n 3 head...原创 2019-01-01 19:47:41 · 131 阅读 · 0 评论 -
coreutils4.5.1 fold.c
coreutils4.5.1 fold.c今天看了看fold.c,开始有些害怕,硬着头皮,终于看出了点眉目。先试着用一下。echo 001{a-z} | fold -w 8echo 001{a..z} | ./fold -w 8hello world 1001a 001b 001c 001d 001e 001f 001g 001h001i 001j 001k 001l 0...原创 2019-01-05 10:49:11 · 141 阅读 · 0 评论 -
coreutils4.5.1 tee.c代码分析
coreutils4.5.1 tee.c代码分析基本看懂了,比上次要好。原来以为这个程序简单,后来,发现要处理选项,就复杂了。而且更离谱的是,这个程序没有调用getopt进行参数解析。如下: while (argc > 0 && *argv[0] == '-') { register char *temp; register int i...原创 2019-01-05 10:47:58 · 169 阅读 · 0 评论 -
coreutils4.5.1 tee.c代码分析
------------------------coreutils4.5.1 tee.c代码分析今天早上起来,吃完早餐,弹会儿琴,就开始读代码了。昨天看了一点,接着看tee.c,整体比较简单,不过神奇的是,tee,可以同时写进多个文件,我原来从来没想过这样:echo "hello world" | tee a.txt b.txt c.txt | grep "hello"看到没,tee可把...原创 2019-01-05 10:46:33 · 169 阅读 · 0 评论 -
coreutils4.5.1 rmdir.c源码分析
刚才忘记了说rmdir这个子程序,其实它也很有意思的。它用到了多进程,fork(),神奇吧。因为我是在ubuntu下读代码,设置好了tags,但ubuntu下能使用gvim,不方便拷代码,于是在windows下用gvim读代码,但没有设置好tags,于是代码不能跑到lib下,刚才设置好了,我的配置如下:set tags=C:\\Users\\ubn\\Downloads\\coreutils-...原创 2019-01-04 19:55:25 · 131 阅读 · 0 评论