Вопрос Являются ли константы fcntl в Ubuntu отличными от других ОС?


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

Эти ребята получают 1 2 3 за rdlck, wrlck, а также unlck,

  • Однако, когда я запускаю этот код на C, чтобы определить constnats на ubuntu, он говорит мне, что они 0, 1 и 2: my constants on ubuntu

1
2017-09-24 06:41


происхождения




ответы:


Я бы сказал, что эти постоянные значения зависят от 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
2017-09-24 08:20



Я узнал тонну с этой должности, спасибо! Вот почему я принял этот ответ. Тем не менее, я дал муру голос. Я очень новичок в C спасибо за эту основную деталь. Итак, libc используется на linux'es правильно? Mac OS основана на linux, но с помощью «linu specific» это исключает mac os вправо? - Noitidart
Считаете ли вы, что то же самое относится к порядку полей в flock состав? Я попытался применить вашу технику к flock strcuture, но не уверен, правильно ли я понял. Из моего поиска flock порядок полей отличается от Mac OS, основанной на ней (developer.apple.com/library/mac/documentation/Darwin/Reference/...), но я не уверен, что все Linux имеют одинаковый порядок полей. - Noitidart
@Noitidart: Извините, я не могу подтвердить OSX. - Sylvain Pineau
@Noitidart Что вы подразумеваете под порядком полей в структуре? Поля имеют имена, порядок не имеет значения. Как сертифицированный UNIX OSX должен иметь все поля, указанные в POSIX, и поскольку Linux не требует контроля, если это необходимо, у нас тоже есть эти поля. - muru
@Noitidart - это длинный чат, и я действительно не понимаю, что вы делаете. Вы настраиваете привязки для некоторой библиотеки C в JS? - muru


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


1
2017-09-24 08:19



Спасибо, мужик! Я буду помнить об этом :) Я многому научился у пост @ Сильвена, который был принят, но определенно определенно оценил ваш пост и поддержал его :) - Noitidart
@Noitidart Хорошо, когда я увидел этот ответ, я был вполне уверен, что его можно принять. : D - muru