- 論壇徽章:
- 0
|
原帖由 r2007 于 2007-1-7 12:07 發(fā)表
wc -c <&5
這句又掃描了一遍原文件,影響效率,值得商榷。
用大小為10bytes和3GB的文件分別測(cè)試了一下,使用的real_time幾乎沒(méi)區(qū)別
strace一下它
- $strace wc -c <FC-6-i386-DVD.iso 2>&1|tail -12
- fstat64(0, {st_mode=S_IFREG|0755, st_size=3525195776, ...}) = 0
- _llseek(0, 0, [0], SEEK_CUR) = 0
- _llseek(0, 0, [3525195776], SEEK_END) = 0
- fstat64(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
- mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7c24000
- close(0) = 0
- write(1, "3525195776\n", 113525195776
- ) = 11
- close(1) = 0
- munmap(0xb7c24000, 4096) = 0
- exit_group(0) = ?
- Process 6560 detached
復(fù)制代碼
發(fā)現(xiàn)wc -c只讀取了文件的前4096字節(jié)(見(jiàn)mmap那行調(diào)用),又與stat命令的strace信息相對(duì)照,wc -c應(yīng)該只是通過(guò)fd指向的文件表項(xiàng)和v節(jié)點(diǎn)表來(lái)獲得字節(jié)數(shù)(參見(jiàn)APUE圖3-2及相關(guān)內(nèi)容)
因此,文件的大小對(duì)wc -c的效率幾乎沒(méi)有影響(但wc -l、wc -w都會(huì)循環(huán)調(diào)用read(2),因此它們的效率是會(huì)受到文件大小影響的)
但r2007兄的提醒讓我想到了head,它恐怕是要直接調(diào)用read(2)的,果不其然,strace信息證明了:無(wú)論是-c還是-n選項(xiàng),都循環(huán)調(diào)用了read(2)。
所以,可能隨文件大小或文件定位影響我代碼效率的,除了中間那句明顯的dd讀寫(xiě)外,就是這句head了。
這樣,也說(shuō)明了從效率上考慮,我第二段代碼比第一段代碼稍優(yōu)一些(因?yàn)樯儆昧艘淮蝖ead)。 |
|