带F_设置的fcntl
问题:当使用F_SETLK调用时,fcntl函数的第三个参数的含义是什么 检查fcntl的手册页,我发现第三个参数应该是指向结构的指针。我假设手册中提到的是这种情况:带F_设置的fcntl,c,posix,C,Posix,问题:当使用F_SETLK调用时,fcntl函数的第三个参数的含义是什么 检查fcntl的手册页,我发现第三个参数应该是指向结构的指针。我假设手册中提到的是这种情况: fcntl(fd, F_SETLK, *fl) 在gogole搜索中,我发现了许多使用fcntl的实际示例,如下所示: FCNTL(fd, F_SETLK, &fl) 我对这个问题的正确答案有点困惑。根据手册: 整数fcntl(整数fd,整数cmd,…/*arg*/) fcntl()可以接受可选的第三个参数。是否需要
fcntl(fd, F_SETLK, *fl)
在gogole搜索中,我发现了许多使用fcntl的实际示例,如下所示:
FCNTL(fd, F_SETLK, &fl)
我对这个问题的正确答案有点困惑。根据手册: 整数fcntl(整数fd,整数cmd,…/*arg*/) fcntl()可以接受可选的第三个参数。是否需要此参数由cmd确定。所需的参数类型在每个cmd名称后的括号中指示(在大多数情况下,所需的类型是int,我们使用名称arg标识参数),如果参数不是必需的,则指定void F_SETLK(结构群集*)
当
cmd
为F_SETLK
时,需要第三个参数,它是指向flock
结构的指针。根据手册页:
整数fcntl(整数fd,整数cmd,…/*arg*/)
fcntl()可以接受可选的第三个参数。是否需要此参数由cmd确定。所需的参数类型在每个cmd名称后的括号中指示(在大多数情况下,所需的类型是int,我们使用名称arg标识参数),如果参数不是必需的,则指定void
F_SETLK(结构群集*)
当
cmd
为F_SETLK
时,需要第三个参数,它是指向flock
结构的指针。您找到的示例具有正确用法:
FCNTL(fd, F_SETLK, &fl);
标志F_SETLK
是释放一个建议锁(先前已获取),而指针fl
是一个结构变量,声明如下:
struct flock fl;
当手册上说:
第三个参数lock是指向至少
至少以下[…]
如果fl
被声明为:struct flock fl
然后&fl
生成一个指针,fnctl调用如下所示:
FCNTL(fd, F_SETLK, &fl);
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(fd, F_SETLK, fl);
您可能应该阅读更多关于指针的信息,并理解它们,因为这是您问题的中心问题,而不是fcntl。您发现的示例具有正确的用法:
FCNTL(fd, F_SETLK, &fl);
标志F_SETLK
是释放一个建议锁(先前已获取),而指针fl
是一个结构变量,声明如下:
struct flock fl;
当手册上说:
第三个参数lock是指向至少
至少以下[…]
如果fl
被声明为:struct flock fl
然后&fl
生成一个指针,fnctl调用如下所示:
FCNTL(fd, F_SETLK, &fl);
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(fd, F_SETLK, fl);
您可能应该阅读更多关于指针的信息,并理解它们,因为这是您问题的中心问题,而不是fcntl。没有提到fcntl(fd,F_SETLK,*fl),除此之外,它还有这样一句话要说
第三个参数lock是指向结构的指针
F_SETLK(结构群集*)
获取锁(当l_type为F_RDLCK或F_WRLCK时)或释放锁(当l_type为F_UNLCK时),锁定由
l_从哪里开始,l_开始,l_锁定字段。
如果另一个进程持有冲突锁,则此调用返回-1并将errno设置为EACCES或EAGAIN
现在,fcntl()的原型是
这是一个可变参数函数。在2中传递的命令。参数确定需要为变量参数传递的内容
这意味着对于cmd
F_SETLK
您将指向struct flock
的指针传递为3。论点如果您有一个struct flock fl
,您可以通过执行&fl
e、 g
代码中没有提到fcntl(fd,F_SETLK,*fl),除此之外,它还有这样的说法
第三个参数lock是指向结构的指针
F_SETLK(结构群集*)
获取锁(当l_type为F_RDLCK或F_WRLCK时)或释放锁(当l_type为F_UNLCK时),锁定由
l_从哪里开始,l_开始,l_锁定字段。
如果另一个进程持有冲突锁,则此调用返回-1并将errno设置为EACCES或EAGAIN
现在,fcntl()的原型是
这是一个可变参数函数。在2中传递的命令。参数确定需要为变量参数传递的内容
这意味着对于cmd
F_SETLK
您将指向struct flock
的指针传递为3。论点如果您有一个struct flock fl
,您可以通过执行&fl
e、 g
“符号化”不是一个词。。。你是说“规范”吗?我编辑了我的帖子。我想说“意义”,“符号化”不是一个词。。。你是说“规范”吗?我编辑了我的帖子。我想说“意义”。