【发布时间】:2014-07-23 11:55:09
【问题描述】:
我正在查看File#flock 的 Ruby MRI 代码。该文档指出它“并非在所有平台上都可用。”,但没有说明是哪一个。如果我冒昧地猜测一下,旧的 FAT 文件系统可能没有锁定,但我不想猜测。
深入了解实现会将我带到rb_file_flock(VALUE obj, VALUE operation),而后者又调用rb_thread_flock(void *data)。这只是包装了从sys/file.h 对flock 的调用。但是,似乎此实现可能可用也可能不可用:
#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可用,我可以期待文件锁定工作吗?
【问题讨论】:
-
您是否要求枚举所有平台?包括游戏机和烤面包机?
-
好吧,我不知道在哪里画线。我想我只对可以编译 Ruby 的平台感兴趣,但我不确定如何呈现这样的列表。实际上,我想像 osx、linux、*bsd、windows 和 solaris 这样的东西可以涵盖任何现实世界的案例,从这个页面来看:ruby-lang.org/en/installation