ファイルロックを管理するflockコマンドはMacOS Xにありますか?
ここにクロスプラットフォームのflockコマンドがあります:
https://github.com/discoteq/flock
私はそれをテストしました、そしてそれはutil-linux群れのドロップイン代替品としてOSXでうまく機能します。
Perlワンライナー:
Perl -MFcntl=:flock -e '$|=1; $f=shift; print("starting\n"); open(FH,$f) || die($!); flock(FH,LOCK_EX); print("got lock\n"); system(join(" ",@ARGV)); print("unlocking\n"); flock(FH,LOCK_UN); ' /tmp/longrunning.sh /tmp/longrunning.sh
スクリプトとして:
#!/usr/bin/Perl
# emulate linux flock command line utility
#
use warnings;
use strict;
use Fcntl qw(:flock);
# line buffer
$|=1;
my $file = shift;
my $cmd = join(" ",@ARGV);
if(!$file || !$cmd) {
die("usage: $0 <file> <command> [ <command args>... ]\n");
}
print("atempting to lock file: $file\n");
open(FH,$file) || die($!);
flock(FH,LOCK_EX) || die($!);
print("got lock\n");
print("running command: $cmd\n");
system($cmd);
print("unlocking file: $file\n");
flock(FH,LOCK_UN);
flock
コマンドがOSXに存在するとは思わないが、BSDには存在するため、OSXへの移植がかなり簡単になるはずです。
利用可能な最も近いものはshlock
コマンド( manページ )ですが、flock
ほど堅牢でも安全でもありません。
最善の策は、LinuxまたはBSDバージョンのflock
をOSXに移植することを検討することかもしれません。
OSXにはflock
コマンドはありません。 flock
システムコールを使用してそのリソースへのアクセスを管理するプログラムとロック可能なリソースを共有できるシェルスクリプトが必要な場合は、BSDソースを自分でコンパイルするか、次のように記述して、そのようなプログラムを作成する必要があります。独自の同等のプログラム(おそらくPerlまたはRuby、または高レベルのシステムインターフェイスの一部としてflock
を公開するその他の言語)。
ただし、必要なのがシェルスクリプトからのファイルへのアクセスを同期する方法だけであり、flock
を使用して同期しようとする他のプログラムがまだ作成されていない場合は、lockfile
コマンド。これは、procmail
パッケージに付属しています。 OSXはprocmail
で出荷されていました。もはや機能しませんが、たとえば、 自作 。
完全を期すために、いくつかの小さな変更を加えてOSX用にflock(2)をコンパイルできます。テストは実行していませんが、基本的な機能は動作します。
ソースは ftp://ftp.kernel.org//pub/linux/utils/util-linux から取得できます。次に、OSXで使用できない文字列関数へのいくつかの呼び出しを置き換える必要があります。これで準備完了です。
ここで: https://Gist.github.com/Ahti/4962822 はバージョン2.22.1の変更されたflock.cですが、ヘッダーには他のソースが必要です。
たぶんlockfile
も使用できます。
flock
コマンドラインユーティリティまたはflock
機能をお探しですか?
flock(1)
はOSXでは使用できません。flock(2)
(ファイルロック用のC関数)、 ただし 。
flock(1)
を使用して簡単なコマンドラインflock(2)
ユーティリティを作成するのは簡単です。