【发布时间】:2014-03-08 12:47:32
【问题描述】:
我发现boilerplate flock(1) code 看起来很有希望。现在我想在盲目使用之前了解组件。
似乎这些函数使用flock的第三种形式
flock [-sxun] [-w timeout] fd
第三种形式在 shell 脚本中很方便,通常使用 方式如下:
(
flock -s 200
# ... commands executed under lock ...
) 200>/var/lock/mylockfile
我迷失的部分(来自sample wrapper functions)是这个符号
eval "exec $LOCKFD>\"$LOCKFILE\""
或简写自 flock 手册页
200>/var/lock/mylockfile
这样做有什么作用?
我注意到flock 的后续命令传递的值与初始重定向中的值不同,导致flock 抱怨
flock: 50: Bad file descriptor
似乎flock 正在使用文件描述符作为映射来了解要对哪个文件进行操作。但是,为了使其正常工作,这些描述符必须仍然存在并与文件相关联,对吧?
重定向完成并创建锁定文件后,文件是否已关闭,与打开文件关联的文件描述符是否已蒸发?我认为文件描述符只与打开的文件相关联。
这是怎么回事?
【问题讨论】:
-
我在大学学习 Unix 和 Linux 编程已经至少 10 年了,所以文件描述符现在对我来说有点模糊。请多多包涵!
-
它将文件描述符 #200 重定向到该路径名。
标签: bash exec file-descriptor flock