如何在Perl中刷新文件?

24

我有一个Perl脚本,它每三秒向现有文件追加一行内容。同时,有一个C++应用程序会从该文件中读取。

问题在于,应用程序在脚本完成并关闭文件句柄后开始读取文件。为了避免这种情况,我想在每次追加新行后进行强制刷新。如何实现?


在“基本”Perl中没有刷新函数,但是如果您调用binmode $filehandle,它将设置:raw格式,并(作为副作用)进行刷新。它的效果很好。无论如何,如果它在Unix上,您可以创建一个命名管道到文件系统,然后直接写入它。 - TrueY
让你的C++程序从管道(/dev/stdin如果需要文件名而愚蠢)中读取,并检查它是否能够逐行读取 - 如果使用块缓冲读取,则在写入端无法进行任何操作。 - reinierpost
11个回答

-1

我曾经遇到过同样的问题,唯一的区别是不断地用新内容重复写入同一个文件。这个"$| = 1"和自动刷新的关联对我很有帮助:

 open  (MYFILE, '>', '/internet/web-sites/trot/templates/xml_queries/test.xml');
 $| = 1; # Before writing!
 print  MYFILE "$thisCardReadingContentTemplate\n\n";
 close (MYFILE);
 MYFILE->autoflush(1); # After writing!

祝您好运。H


3
据我所知,关闭文件会执行刷新操作。那么在这里,MYFILE->autoflush(1) 应该是用来做什么的呢? - PypeBros
1
选择(MYFILE); $|=1 - MUY Belgium

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接