加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl:撤消文件打开时取消链接

发布时间:2020-12-15 21:44:32 所属栏目:大数据 来源:网络整理
导读:unlink不会删除文件,如果它是打开的;它只是删除名称和名称的链接.取消联系可以解除吗? open(my $fh,"",undef) || die;print $fh "foo";# This does not worklink($fh,"/tmp/bar") || die; 可以将未链接文件的打开文件句柄链接到文件吗? 解决方法 如果可行,
unlink不会删除文件,如果它是打开的;它只是删除名称和名称的链接.取消联系可以解除吗?
open(my $fh,">",undef) || die;
print $fh "foo";
# This does not work
link($fh,"/tmp/bar") || die;

可以将未链接文件的打开文件句柄链接到文件吗?

解决方法

如果可行,您可以将打开模式(‘>’)更改为可读/写.然后,当您需要恢复文件时,您可以使用文件句柄将其打印到新打开的文件,即使需要时也使用相同的名称.
open my $fh,'+>',$file;
say $fh "line 1";
unlink $file;
say $fh "more lines";

seek $fh,0;
open my $fh_rec,'>',$file   or die "Can't open $file (again): $!";
print $fh_rec $_ while <$fh>;

这不是所要求的,但它恢复了文件内容和访问权限
它.进一步打印到$fh会使新的$file不同步,所以这可以在写完(恢复文件)或将打印切换到$fh_rec(然后也关闭$fh)时完成.

恢复文件的另一种方法是使用操作系统,如果它使用/ proc并公开文件句柄.然后可以从/ proc / PID / fd / N复制数据.要识别N,可以使用ls -l扫描fd /(少数)中的所有链接,因为删除的文件应在其名称后面(已删除).

此外,lsof -p PID列出给定进程的所有打开文件描述符.已删除文件的文件已删除(已删除). (lsof L1 -p PID仅输出已删除的条目,但仍有不少.)从此输出中,我们可以读取该文件描述符,然后从/ proc / PID / fd / N复制数据.这样我们也可以获得inode编号,也可用于恢复文件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读