Я просматриваю код Ruby MRI для File#flock
а>. В документации указано, что он «доступен не на всех платформах», но не указано, на каких. Если я рискну предположить, старые файловые системы FAT могут не иметь блокировки, но я бы не хотел строить догадки.
Немного покопавшись в реализации, я перешел к rb_file_flock(VALUE obj, VALUE operation)
, который, в свою очередь, вызывает rb_thread_flock(void *data)
. Это просто перенос вызова flock
из sys/file.h
. Однако кажется, что эта реализация может быть доступна, а может и не быть:
#ifdef HAVE_SYS_FILE_H
# include <sys/file.h>
#else
int flock(int, int);
#endif
Однако я не могу понять, где определяется HAVE_SYS_FILE_H
(возможно, в скрипте сборки?), поэтому я не знаю, на каких платформах это возможно.
Итак, на мой вопрос (вопросы): для каких платформ я могу ожидать, что HAVE_SYS_FILE_H
будет определено. И при условии, что он определен и, таким образом, sys/file.h
доступен, могу ли я ожидать, что блокировка файлов будет работать?