什么是200>" $ somefile"完成?

时间:2014-02-10 23:15:15

标签: bash exec file-descriptor flock

我发现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正在使用文件描述符作为地图来了解要操作的文件。为了使它能够工作,那些描述符必须仍然存在并与文件相关联,对吧?

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

这里发生了什么?

1 个答案:

答案 0 :(得分:4)

200>/var/lock/mylockfile

这会创建一个文件/var/lock/mylockfile,可以通过子shell内的文件描述符200写入。数字200是任意的。挑选一个较大的数字可以减少子shell中任何命令“注意到”额外文件描述符的可能性。

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

flock -s 200

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