这几天看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:
这是很小的一部分....
这些参数.....
后来 才发现 原来网上就有源码统计工具可以下载...真是郁闷......(不过我的也不错 可以生成目录树哦!!)
本文介绍了一款自编程序,用于统计Linux内核源代码的行数和字符数,并生成目录树。该程序能够递归遍历指定扩展名的文件,支持文件统计及字符出现频率统计。
1万+

被折叠的 条评论
为什么被折叠?



