私はシェルスクリプトとacプログラムを持っています
#!/bin/bash
for i in `seq 1 10000`
do
(flock -x 200 // what is 200?
./taskA
) 200> lockfile
done
C プログラムでは、関連するコード スニペットは次のとおりです。
int fd = open("lockfile", O_WRONLY|O_CREAT); // what permission should I put here?
for(i=0;i<10000;i++){
if(fd==-1)
printf("open file fails\n");
if(flock(fd, LOCK_EX)==0 ){ // lock the file
taskB(); // here is what I want to do
}
if (flock(fd, LOCK_UN)==0) // after finishing those tasks, unlock it
{
printf("C unlock\n");
}
}
taskA
シェル スクリプトと C プログラムを同じホストで実行したいのですが、別の時間に交互に実行できることを願っていますがtaskB
、flock に慣れていないため、アクセス許可の問題やファイルを開くのに失敗することがあります。
たとえば、C プログラムを実行して終了させてから再度実行すると、「ファイルを開くのに失敗しました」というメッセージが表示され、パーミッションは次のようになります。
---xr-x--T 1 esolve 200036 0 May 6 02:18 lockfile
スクリプトとコードを変更する方法 ありがとう!