我写了两个程序.一个程序将内容同时写入文本文件.另一个程序同时读取该内容.
但是这两个程序应该同时运行.对我来说,程序是正确写入文件.但是另一个程序没有读取文件.
我知道一旦写入过程完成,只有数据将存储在硬盘中.然后另一个进程可以读取数据.
但我希望在单个文件中同时读写不同的进程.我怎样才能做到这一点?
请帮我.以下代码在文件中写入内容
sub generate_random_string
{
my $length_of_randomstring=shift;# the length of
# the random string to generate
my @chars=('a'..'z','A'..'Z','0'..'9','_');
my $random_string;
foreach (1..$length_of_randomstring)
{
# rand @chars will generate a random
# number between 0 and scalar @chars
$random_string.=$chars[rand @chars];
}
return $random_string;
}
#Generate the random string
open (FH,">>file.txt")or die "Can't Open";
while(1)
{
my $random_string=&generate_random_string(20);
sleep(1);
#print $random_string."\n";
print FH $random_string."\n";
}
Run Code Online (Sandbox Code Playgroud)
以下代码是读取内容的.这是另一个过程
open (FH,"<file.txt") or die "Can't Open";
print "Open the file Successfully\n\n";
while(<FH>)
{
print "$_\n";
}
Run Code Online (Sandbox Code Playgroud)
asc*_*pis -1
你是在 windows 还是 *nix 上?您也许可以在 *nix 上使用 tail 将类似的内容串在一起,以获取写入文件时的输出。在 Windows 上,您可以使用 FILE_SHARE_READ 和/或 FILE_SHARE_WRITE 调用 CreateFile(),以便在您打开文件进行读/写时允许其他人访问该文件。您可能需要定期检查文件大小是否已更改,以便知道何时读取(我在这里不能 100% 确定。)
另一种选择是内存映射文件。