Initial File:
line 1
line 2
line 3
File after append 1:
line 1
line 2
line 3
lin
File after append 2:
line 1
line 2
line 3
line 4
如果我执行“tail -f filename”,然后文件如上更新,
tail 是继续更新半行,还是只返回原子行?
即
我能保证在附加 1 后看到/看不到“lin”吗? 如果“第 4 行”后没有\n,我会看到吗?
特别是,我对是否可以读取原子行很感兴趣。我正在运行一个日志监控应用程序,我只想解析完整的行。日志文件可能会更新到半行,如果 tail 不能保证原子行,我将不得不防止这种情况(即逐个字符读取一个字符,然后在我看到\n 时识别一行)。
最佳答案
在我的 mac(9.8.0 Darwin 内核版本 9.8.0
)上,内置的 tail
显示附加到文件的字符。这是一个小测试:
import sys, time
def write(fname):
fd = open(fname, 'wb')
try:
while True:
for i in range(0, 5):
fd.write('a')
fd.flush()
print >>sys.stderr, "Wrote a char"
time.sleep(2)
fd.write('\n')
fd.flush()
print >>sys.stderr, "Wrote newline"
time.sleep(2)
finally:
fd.close()
if __name__ == '__main__':
write(sys.argv[1])
运行:python test.py test.txt
然后是 tail -f test.txt
。它显示出现的 a-s。
关于Linux:对于 "tail -f filename",是否仅在\n 之后跟随读取行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5674378/