哪些平台实现了群?

时间:2014-06-03 08:15:16

标签: c flock

我正在查看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可用,我可以期待文件锁定工作吗?

1 个答案:

答案 0 :(得分:0)

flock是BSD和Linux扩展功能:

  

遵守

     

4.4BSD(flock()调用首次出现在4.2BSD中)。可能以fcntl(2)实现的flock()版本出现在大多数UNIX系统上。

Unix规范确实要求建议文件锁定以fcntl(F_SETLK)实现:

  

常规文件支持记录锁定 ,其他文件可能支持。