w********s 发帖数: 214 | 1 implement linux command tail.
We will focus only on "-n" and "-f" options.
tail FILE 是显示打印文件最后10行。tail -n 5表示打印文件最后五行。
The -f option causes tail to not stop when end of file is
reached, but rather to wait for additional data to be appended
to
the input.
有两个concern,
文件可能很大,所以不能全部读入,问怎么解决。
文件可能大得超过了内存,问怎么读。
(2) Two cases for value of N (A) N is small to fit in memory (B) N is large
to fit in memory
Please email your code and clear instructions to execute your program. |
c***0 发帖数: 449 | 2 你看看这个行不行。
void tail(char* file, int fileLength, int n){
int subfileLength;
int fileIndex;
if (n == 0) return;
if (fileLength > memorySize){
subfileLength = roundup(fileLength/memorySize);
fileIndex = memorySize - roundup(n/subfileLength);
file = file + fileIndex * subfileLength;
tail(file, subfileLength, n%subfileLength);
displayfromIndex(fileIndex + 1);
}
else
displayLastNLines();
} |
w********s 发帖数: 214 | 3 貌似LS的代码有些问题。
tail(file, subfileLength, n%subfileLength); 这一行怎么解?
能不能给一个real code,这样的pseudo code反而不是特别容易读。
不过还是多谢回复了 |
c***0 发帖数: 449 | 4 这一行递归啊,当小文件小于内存大小的时候用一个大小为n%subfileLength的
circular buffer就可以搞定了。 |
w*******s 发帖数: 138 | 5 开一个固定大小的缓存,从后到前读文件直到找到了n行,然后从此位置开始再读文件
,打印
appended
【在 w********s 的大作中提到】 : implement linux command tail. : We will focus only on "-n" and "-f" options. : tail FILE 是显示打印文件最后10行。tail -n 5表示打印文件最后五行。 : The -f option causes tail to not stop when end of file is : reached, but rather to wait for additional data to be appended : to : the input. : 有两个concern, : 文件可能很大,所以不能全部读入,问怎么解决。 : 文件可能大得超过了内存,问怎么读。
|
w********s 发帖数: 214 | 6 能给个代码学习一下么?最好是java的
【在 w*******s 的大作中提到】 : 开一个固定大小的缓存,从后到前读文件直到找到了n行,然后从此位置开始再读文件 : ,打印 : : appended
|
s**x 发帖数: 7506 | 7 这个 -f 还挺麻烦的, 刚查了查,要用 inotify to detech when the file is
modified, 还没用过。
问这种 I/O 的都是吃饱了撑的没事干的,sigh. |
w********s 发帖数: 214 | 8 而且从后往前读文件貌似不能用buffer啊,如果buffer输出的话,那结果就不是tail了
吧?如果一个buffer一个buffer输出的话,应该是从前往后顺序输出吧?
【在 w*******s 的大作中提到】 : 开一个固定大小的缓存,从后到前读文件直到找到了n行,然后从此位置开始再读文件 : ,打印 : : appended
|
w********s 发帖数: 214 | 9 嗯,的确啊,不过既然有人问了就学习一下呗
【在 s**x 的大作中提到】 : 这个 -f 还挺麻烦的, 刚查了查,要用 inotify to detech when the file is : modified, 还没用过。 : 问这种 I/O 的都是吃饱了撑的没事干的,sigh.
|
s**x 发帖数: 7506 | 10
同是码工,相煎太急阿。 :)
【在 w********s 的大作中提到】 : 嗯,的确啊,不过既然有人问了就学习一下呗
|
w********s 发帖数: 214 | 11 顶
【在 s**x 的大作中提到】 : : 同是码工,相煎太急阿。 :)
|
w*******s 发帖数: 138 | 12 源码:
http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/tail.c#
【在 w********s 的大作中提到】 : 而且从后往前读文件貌似不能用buffer啊,如果buffer输出的话,那结果就不是tail了 : 吧?如果一个buffer一个buffer输出的话,应该是从前往后顺序输出吧?
|
w********s 发帖数: 214 | 13 多谢楼上,不过我想他们要的solution应该不会这么复杂。 |