プログラムの動作がわかりません。
int MyOpenWrite(char *name,int flags) {
int fd;
unsigned long tm;
unsigned long t;
tm=time(0)+5; //5 seconds
for (;;) {
fd = open(name,flags,S_IREAD|S_IWRITE|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
if (fd>0) break;
if (time(0)>=tm) return -1;
}
//1111111111111111111
LockFile(fd);
DelayInSeconds(60);
//2222222222222222222222
return fd;
}
int LockFile(int fd) //return 0 - OK; -1 - Error
{
struct flock lock;
lock.l_type = F_WRLCK;
lock.l_start = 0;
lock.l_whence = SEEK_SET;
lock.l_len = 0;
return fcntl(fd,F_SETLKW,&lock);
}
これはcgi-binプログラムです。あるファイルにデータを追加するリクエストを1つ開始しました。ご覧のとおり、ロック後60秒間遅延します。次に、この遅延なしにプログラムを再コンパイルし、次の要求を実行しました。2番目のプログラムは、最初のプログラムが終了するまで//1111と//2222の間で待機しています。2番目のプログラムが5秒間待機した後、-1コードでMyOpenWriteに戻ることを期待していました。しかし、開封サイクルに遅れはありません。ただし、LockFileには長い遅延があります。ここで何が問題なのですか?ありがとう!