如何模拟锁定文件?

如何模拟锁定文件?

我想锁定一个文件,运行一些测试然后解锁该文件。我怎样才能做到这一点。我可以使用命令行、perl 或 shell 脚本。

我想锁定文件的原因是,有时在连接到ftp我们的 Apache 服务器时,我们在删除文件时会收到错误消息:“无法打开或删除包含正在运行的程序的文件”。我想使用ftp移动命令而不是删除命令进行测试,看看是否捕获此错误。我想测试锁定文件是否会导致此错误。

答案1

快速:文件锁定通常仅由更高级别的语言支持(据我所知)。

对于 Perl 示例,您可以从这里开始https://stackoverflow.com/questions/34920/how-do-i-lock-a-file-in-perl或任何 Perl 经典之作https://docstore.mik.ua/orelly/perl/cookbook/ch07_12.htm(注意 SSL 证书问题)或类似的问题。

对于 shell 脚本,您必须考虑 JdeBP 的评论:为什么要锁定文件。根据您的答案,您可以考虑一些策略,例如暂时更改文件的写入权限、重命名文件并在将文件名改回之前处理重命名的文件、处理副本并在之后重写原始文件。

答案2

您可以使用集群命令:羊群人档案

我就是从这里了解到的。https://stackoverflow.com/questions/24388009/linux-flock-how-to-just-lock-a-file

这是我的脚本,用于锁定名为 10 秒的文件2.txt(对链接中的脚本进行了少量修改):

exec 3>2.txt    # open a file handle; this part will always succeed
flock -x 3      # lock the file handle; this part will block
sleep 10
exec 3>&-

相关内容