问题:使用F_SETLK调用时fcntl函数的第三个参数是什么意思?
好吧,查看 fcntl 的手册页我发现第三个参数应该是一个指向结构的指针。我假设手册是指这种情况:
fcntl(fd, F_SETLK, *fl)
在 gogole 搜索中,我发现了很多像这样使用 fcntl 的实际例子:
FCNTL(fd, F_SETLK, &fl)
我对这个问题的正确答案有点困惑。
最佳答案
您找到的示例具有正确的用法:
FCNTL(fd, F_SETLK, &fl);
标志 F_SETLK
用于释放咨询锁(之前已获得),而指针 fl
是一个结构变量,它声明如下:
struct flock fl;
当手册说时,您可能对什么是指针感到困惑:
The third argument, lock, is a pointer to a structure that has at least the following [...]
如果 fl
被声明为:struct flock fl;
然后 &fl
产生一个指针并且 fnctl 调用看起来像:
FCNTL(fd, F_SETLK, &fl);
如果 fl
声明为:
struct flock *fl; // fl is a pointer to struct flock
fl = malloc( sizeof (struct flock) ); // allocate memory
然后 fl
是一个指针,fcntl 调用看起来像:
FCNTL(fd, F_SETLK, fl);
您可能应该阅读更多关于指针的信息并理解它们,因为这是您问题的中心问题而不是 fcntl。
关于c - fcntl 与 F_SETLK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23791740/