200> "$somefile" 有什么成就?



我发现了flock(1)的样板代码,它看起来很有前景。现在我想在盲目使用它之前了解组件。

这些函数似乎使用了flock的第三种形式

flock[-sxun][-w timeout]fd

第三种形式在shell脚本中很方便,通常使用以下方式:

(
flock -s 200 
# ... commands executed under lock ... 
) 200>/var/lock/mylockfile

我丢失的部分(来自示例包装器函数)是这个符号

eval "exec $LOCKFD>"$LOCKFILE""

flock手册页的简写

200>/var/lock/mylockfile

这能实现什么?

我注意到flock的后续命令传递了一个值,而不是初始重定向中的值,导致flock抱怨

flock: 50: Bad file descriptor

flock似乎正在使用文件描述符作为映射来知道要对哪个文件进行操作。不过,为了使其工作,这些描述符必须仍然存在并与文件关联,对吧?

重定向完成后,创建了锁定文件,文件不是关闭了,与打开的文件相关的文件描述符也蒸发了吗?我以为文件描述符只与打开的文件关联。

这是怎么回事?

200>/var/lock/mylockfile

这创建了一个文件/var/lock/mylockfile,该文件可以通过子外壳内的文件描述符200写入。数字200是一个任意的数字。选择一个高数字可以减少子外壳内的任何命令"注意到"额外文件描述符的机会。

(通常,stdin、stdout和stderr分别使用文件描述符0、1和2。这个数字可能低至3。)

flock -s 200

然后使用flock通过先前创建的文件描述符来锁定文件。它需要对200>中的>提供的文件进行写访问。请注意,这种情况发生在上述重定向之后。

相关内容

  • 没有找到相关文章

最新更新