Ubuntu 中的 fcntl 常量与其他操作系统不同吗?

Ubuntu 中的 fcntl 常量与其他操作系统不同吗?

我在 js-ctypes 中的实现中发现了问题fcntl。我使用了错误的常量值。

这些家伙分别获得了 1 2 3 rdlckwrlckunlck

  • 然而,当我运行此 C 代码来找出 ubuntu 上的常量时,它告诉我它们是 0、1 和 2: 我在 ubuntu 上的常量

答案1

我想说这些常量值是 Linux 特有的,而不是 Ubuntu 特有的。

在您的 C 文件中,您获取的fcntl.h内容/usr/include/fcntl.h包含:

/* Get the definitions of O_*, F_*, FD_*: all the
   numbers and flag bits for `open', `fcntl', et al.  */
#include <bits/fcntl.h>

/usr/include/<your_arch>/bits/fcntl.h可以看到以下代码:

/* Include generic Linux declarations.  */
#include <bits/fcntl-linux.h>

最后此/usr/include/<your_arch>/bits/fcntl-linux.h文件定义这些值如下:

#ifndef F_RDLCK
/* For posix fcntl() and `l_type' field of a `struct flock' for lockf().  */
# define F_RDLCK        0   /* Read lock.  */
# define F_WRLCK        1   /* Write lock.  */
# define F_UNLCK        2   /* Remove lock.  */
#endif

要确认它不是 Ubuntu 特有的,你可以检查libc 源代码, 他们是一样的。

答案2

价值manpage此类常量始终是实现定义的,除非标准指定了值。如果直接使用值而不是名称,那只会自找麻烦。fcntl提到了价值观,所以不做任何假设。

相关内容