Отличаются fcntl константы в Ubuntu от другой ОС?

Я нашел проблему с моим fcntl реализация в js-ctypes. Я использовал неправильные постоянные величины.

Эти парни добираются 1 2 3 для rdlck, wrlck, и unlck.

  • Однако, когда я выполняю этот код C для выяснения constnats на человечности его сообщение мне, они 0, 1, и 2: my constants on ubuntu
1
задан 24 September 2014 в 12:19

2 ответа

Я сказал бы, что теми постоянными величинами является конкретный 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
ответ дан 10 November 2019 в 19:22

Значение таких констант всегда определяется реализацией, если только стандарты не определяют это значение. Если вы используете значения непосредственно вместо имен, это просто напрашивается на неприятности. Ничто в manpage из fcntl не упоминает значения, поэтому не принимайте ничего.

1
ответ дан 10 November 2019 в 19:22

Другие вопросы по тегам:

Похожие вопросы: