我无法理解我的程序行为。
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 程序。我已经开始了一个将数据附加到某个文件的请求。如您所见,它在锁定后延迟 60 秒。然后我重新编译了程序,没有这个延迟,并做了下一个请求。第二个程序在 //1111 和 //22222 之间等待,直到第一个程序退出。我希望第二个程序在等待 5 秒后返回带有 -1 代码的 MyOpenWrite。但开放周期没有延迟。但是 LockFile 有很长的延迟。这里有什么问题?谢谢!