Я нашел проблему с моим fcntl
реализация в js-ctypes. Я использовал неправильные постоянные величины.
Эти парни добираются 1 2 3 для rdlck
, wrlck
, и unlck
.
Я сказал бы, что теми постоянными величинами является конкретный 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 источник , они - то же.
Значение таких констант всегда определяется реализацией, если только стандарты не определяют это значение. Если вы используете значения непосредственно вместо имен, это просто напрашивается на неприятности. Ничто в manpage
из fcntl
не упоминает значения, поэтому не принимайте ничего.