c - fcntl 与 F_SETLK

标签 c posix

问题:使用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/

相关文章:

c++ - 多线程 - 在数组中我应该保护什么?

c - 在 c 中使用 #ifdef 时出现语法错误

c - 长整型超出范围

c - 在基于 `fork()` 的服务器中监听 UDS 和 TCP 套接字的正确方法是什么?

multithreading - POSIX 取消点是什么?

无法使用 minicom 发送字符

c - 如果 C 不支持函数重载,sem_open() 如何接受不同的参数大小?

c++ - 如何使用 write() 函数将结构写入文件?

Linux 和 I/O 完成端口?

c - 为 UDP 套接字的 recv fcn 设置超时