对于给定的文件,我可以向后计算行数吗?即从EOF开始,将线计数到开头?
我可以直接到文件的末尾。从那里开始表单,继续寻找新行char(指示新行)并继续增加line_number计数。但是我的结局条件应该是什么?
EOF有反面吗? :)
我自己的建议:如果我从头开始寻找Xth线,我总是可以从这个行号开始得到它:total_lines - X ---足够公平吗?
动机:我有兴趣从一个巨大的(读取真正巨大的)文件的末尾到达Xth行。因此,寻找最佳解决方案。
PS:这不是作业(虽然我是一辈子的学生:p)
答案 0 :(得分:4)
当我这样做时(例如,写了一个标准tail
的粗略等价物)我从最后读了一个块,计算了它中的线,如果我没有足够的线,使用fseek
向后看并读取另一个块(但我不确定后者是否真的发生过,除非我强迫它进行测试)。
答案 1 :(得分:1)
EOF的反面是pos == 0。
POSIX tail命令执行此操作;例如代码,请参阅http://www.koders.com/c/fid8DEE98A42C35A1346FA89C328CC3BF94E25CF377.aspx
答案 2 :(得分:0)
如果你想向后打印线条,你可以使用递归来做到这一点(不确定你的意思是计数,因为计算行数是向前和向后相同)。这听起来像C的介绍的作业问题,所以我会避免放置代码但是这样想。读取一行,如果不是EOF递归读取下一行,否则打印该行并返回。