我正在查看File#flock
的Ruby MRI代码。该文档指出它并非在所有平台上都可用。",但没有说明哪一个。如果我冒昧猜测,旧的FAT文件系统可能没有锁定,但我不想猜测。
在实现中挖掘一下我需要rb_file_flock(VALUE obj, VALUE operation)
,然后调用rb_thread_flock(void *data)
。这只是来自flock
的{{1}}来电。但是,似乎可能会或可能不会提供此实现:
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
可用,我可以期待文件锁定工作吗?
答案 0 :(得分:0)
flock
是BSD和Linux扩展功能:
遵守
4.4BSD(flock()调用首次出现在4.2BSD中)。可能以fcntl(2)实现的flock()版本出现在大多数UNIX系统上。
Unix规范确实要求建议文件锁定以fcntl(F_SETLK)
实现:
常规文件支持记录锁定 ,其他文件可能支持。