这几天看Unix编程 学习了dirent.h这个头文件里面的一些目录读取函数 还有stat.h头文件里面的获取文件信息的函数 编写了Linux下面的ls命令 简化版的ls命令
昨天 由于我的好奇心我下载了一个Linux内核(2.6.34.1)的源代码 看里面有一大堆源代码 好厉害..我就想看看他到底有多少行 没办法 只能自己编程计算 我就用所学的知识编写了一个统计源代码的程序 他可以统计一个目录树中所有指定扩展名的文件有多少行 共有多少个字符 并在文件中生成目录树 我还很蛋疼的加入了统计每个字符在目录中出现了多少个这种功能..(真tmd无聊..)
算法就是通过递归遍历目录树然后读取文件 很sb的..本来想给目录按照名字排序 结果发现windows和linux下面对readdir这个函数的支持不一样 (感觉linux的目录信息结构体是本来就存在的 而windows的目录信息结构体是用API直接读取生成在静态空间里面的 因为文件系统不一样) 在linux下面不排序的话就是乱序 然后对文件名指针排序后就好了 然后在windows下面对指针排序后发现文件都是一样的名字...也就是说指针指向同一个空间.
....然后我就没加入蛋疼的排序功能 (其实在windows下面这个函数是自动生成从小到大的文件名的..真方便..更确定了他的目录结构体是临时生成在静态变量的)
很蛋疼的扫描了下Linux 内核源码...有一千多万行代码 三亿多字符 吓了我一跳...
Charactor count in /media/e/linux/kernel/linux-2.6.34.1:
(Visible charactor)
charactor '
'
(ASCII:
32) :36829877 (11.2174%)
charactor ' ! '
(ASCII:
33) :
227529 (0.0692993%)
charactor ' " '
(ASCII:
34) :
981736 (0.299011%)
charactor ' # '
(ASCII:
35) : 1019531 (0.310522%)
charactor ' $ '
(ASCII:
36) :
7067 (0.00215242%)
charactor ' % '
(ASCII:
37) :
287997 (0.0877162%)
charactor ' & '
(ASCII:
38) :
740808 (0.22563%)
charactor ' ' '
(ASCII:
39) :
129483 (0.0394371%)
charactor ' ( '
(ASCII:
40) : 3935105 (1.19853%)
charactor ' ) '
(ASCII:
41) : 3937486 (1.19925%)
charactor ' * '
(ASCII:
42) : 5294139 (1.61245%)
charactor ' + '
(ASCII:
43) :
430409 (0.131091%)
charactor ' , '
(ASCII:
44) : 4751289 (1.44712%)
charactor ' - '
(ASCII:
45) : 3191487 (0.972042%)
charactor ' . '
(ASCII:
46) : 1575165 (0.479753%)
charactor ' / '
(ASCII:
47) : 2321300 (0.707006%)
charactor ' 0 '
(ASCII:
48) : 6915779 (2.10636%)
charactor ' 1 '
(ASCII:
49) : 2120732 (0.645918%)
charactor ' 2 '
(ASCII:
50) : 1714803 (0.522283%)
charactor ' 3 '
(ASCII:
51) : 1087947 (0.33136%)
charactor ' 4 '
(ASCII:
52) :
986460 (0.300449%)
charactor ' 5 '
(ASCII:
53) :
606067 (0.184592%)
charactor ' 6 '
(ASCII:
54) :
808268 (0.246177%)
charactor ' 7 '
(ASCII:
55) :
468726 (0.142761%)
charactor ' 8 '
(ASCII:
56) :
901063 (0.27444%)
charactor ' 9 '
(ASCII:
57) :
481907 (0.146776%)
charactor ' : '
(ASCII:
58) :
533928 (0.16262%)
charactor ' ; '
(ASCII:
59) : 3781891 (1.15186%)
charactor ' < '
(ASCII:
60) :
532255 (0.162111%)
charactor ' = '
(ASCII:
61) : 2504666 (0.762855%)
charactor ' > '
(ASCII:
62) : 1980438 (0.603189%)
charactor ' ? '
(ASCII:
63) :
50317 (0.0153252%)
charactor ' @ '
(ASCII:
64) :
93794 (0.0285672%)
charactor ' A '
(ASCII:
65) : 2650946 (0.807408%)
charactor ' B '
(ASCII:
66) : 1075072 (0.327438%)
charactor ' C '
(ASCII:
67) : 2480897 (0.755615%)
charactor ' D '
(ASCII:
68) : 1966210 (0.598855%)
charactor ' E '
(ASCII:
69) : 3211633 (0.978178%)
charactor ' F '
(ASCII:
70) : 1381906 (0.420892%)
charactor ' G '
(ASCII:
71) :
960919 (0.29267%)
charactor ' H '
(ASCII:
72) :
683768 (0.208258%)
charactor ' I '
(ASCII:
73) : 2626775 (0.800046%)
charactor ' J '
(ASCII:
74) :
36313 (0.01106%)
charactor ' K '
(ASCII:
75) :
447644 (0.13634%)
charactor ' L '
(ASCII:
76) : 1727130 (0.526038%)
charactor ' M '
(ASCII:
77) : 1720172 (0.523919%)
charactor ' N '
(ASCII:
78) : 1937673 (0.590164%)
charactor ' O '
(ASCII:
79) : 1814087 (0.552523%)
charactor ' P '
(ASCII:
80) : 1867258 (0.568717%)
charactor ' Q '
(ASCII:
81) :
181357 (0.0552365%)
charactor ' R '
(ASCII:
82) : 2666262 (0.812072%)
charactor ' S '
(ASCII:
83) : 2613991 (0.796152%)
charactor ' T '
(ASCII:
84) : 2647271 (0.806288%)
charactor ' U '
(ASCII:
85) : 1124368 (0.342453%)
charactor ' V '
(ASCII:
86) :
600963 (0.183037%)
charactor ' W '
(ASCII:
87) :
457188 (0.139247%)
charactor ' X '
(ASCII:
88) :
586961 (0.178773%)
charactor ' Y '
(ASCII:
89) :
367127 (0.111817%)
charactor ' Z '
(ASCII:
90) :
121554 (0.0370221%)
charactor ' [ '
(ASCII:
91) :
409347 (0.124676%)
charactor ' \ '
(ASCII:
92) :
349838 (0.106551%)
charactor ' ] '
(ASCII:
93) :
409188 (0.124628%)
charactor ' ^ '
(ASCII:
94) :
9349 (0.00284746%)
charactor ' _ '
(ASCII:
95) :13221908 (4.02704%)
charactor ' ` '
(ASCII:
96) :
1844 (0.000561633%)
charactor ' a '
(ASCII:
97) : 9570598 (2.91495%)
charactor ' b '
(ASCII:
98) : 2978191 (0.907078%)
charactor ' c '
(ASCII:
99) : 7846774 (2.38992%)
charactor ' d '
(ASCII: 100) : 8108947 (2.46977%)
charactor ' e '
(ASCII: 101) :18294431 (5.572%)
charactor ' f '
(ASCII: 102) : 5390799 (1.64189%)
charactor ' g '
(ASCII: 103) : 2898564 (0.882825%)
charactor ' h '
(ASCII: 104) : 3359586 (1.02324%)
charactor ' i '
(ASCII: 105) :12066998 (3.67529%)
charactor ' j '
(ASCII: 106) :
147680 (0.0449794%)
charactor ' k '
(ASCII: 107) : 1681804 (0.512233%)
charactor ' l '
(ASCII: 108) : 5953164 (1.81318%)
charactor ' m '
(ASCII: 109) : 4031803 (1.22798%)
charactor ' n '
(ASCII: 110) :10077726 (3.06941%)
charactor ' o '
(ASCII: 111) : 8338111 (2.53957%)
charactor ' p '
(ASCII: 112) : 5128636 (1.56205%)
charactor ' q '
(ASCII: 113) :
618905 (0.188502%)
charactor ' r '
(ASCII: 114) :11416137 (3.47705%)
charactor ' s '
(ASCII: 115) :10435561 (3.17839%)
charactor ' t '
(ASCII: 116) :14491605 (4.41376%)
charactor ' u '
(ASCII: 117) : 5920131 (1.80311%)
charactor ' v '
(ASCII: 118) : 2730102 (0.831516%)
charactor ' w '
(ASCII: 119) : 1501878 (0.457432%)
charactor ' x '
(ASCII: 120) : 3498330 (1.0655%)
charactor ' y '
(ASCII: 121) : 1392112 (0.424%)
charactor ' z '
(ASCII: 122) :
377025 (0.114832%)
charactor ' { '
(ASCII: 123) :
954629 (0.290755%)
charactor ' | '
(ASCII: 124) :
312395 (0.0951472%)
charactor ' } '
(ASCII: 125) :
954509 (0.290718%)
charactor ' ~ '
(ASCII: 126) :
44073 (0.0134235%)
COUNT:
Line: 11636893
Characotor 328328111
TOTAL:
File: 26285
Folder 1982
-----------------------------------------------------------
这是他的统计 另外他还可以生成级联目录树
find: .c
.h
.cpp
Folder Tree:
[+]/media/e/linux/kernel/linux-2.6.34.1
[+]arch
[+]alpha
[+]boot
[|-]bootp.c
(size:5717,line: 217)
[|-]bootpz.c
(size:13443,line: 480)
[|-]main.c
(size:4397,line: 194)
[|-]misc.c
(size:4505,line: 175)
[+]tools
[|-]mkbb.c
(size:3562,line: 153)
[|-]objstrip.c
(size:6095,line: 282)
[+]include
[+]asm
[|-]8253pit.h
(size:
48,line:
4)
[|-]a.out-core.h
(size:2444,line:
81)
[|-]a.out.h
(size:2438,line: 103)
[|-]agp.h
(size: 418,line:
19)
[|-]agp_backend.h
(size: 909,line:
43)
[|-]asm-offsets.h
(size:
35,line:
2)
[|-]atomic.h
(size:6215,line: 262)
[|-]auxvec.h
(size: 651,line:
25)
[|-]barrier.h
(size: 751,line:
36)
[|-]bitops.h
(size:9210,line: 469)
[|-]bitsperlong.h
(size: 174,line:
9)
[|-]bug.h
(size: 532,line:
25)
[|-]bugs.h
(size: 294,line:
21)
[|-]byteorder.h
(size: 131,line:
7)
[|-]cache.h
(size: 542,line:
24)
[|-]cacheflush.h
(size:2675,line:
76)
[|-]checksum.h
(size:2023,line:
76)
这是很小的一部分....
Source file manager
V1.0
usage: ./src_man myfolder
./src_man myfolder -find .c .h .cpp
./src_man myfolder -notree -count -find .c .h .cpp
./src_man myfolder -count -find .c .h .cpp
这些参数.....
后来 才发现 原来网上就有源码统计工具可以下载...真是郁闷......(不过我的也不错 可以生成目录树哦!!)
Charactor count in /media/e/linux/kernel/linux-2.6.34.1:
(Visible charactor)
COUNT:
TOTAL:
-----------------------------------------------------------
这是他的统计 另外他还可以生成级联目录树
find:
这是很小的一部分....
这些参数.....
后来 才发现 原来网上就有源码统计工具可以下载...真是郁闷......(不过我的也不错 可以生成目录树哦!!)