新创build的文件夹上的fsync?

任何人都可以解释为什么当我通过文件夹描述符时,fsync可以返回EINVAL? 有我的代码,这很简单:

#include <dirent.h> /* Defines DT_* constants */ #include <fcntl.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/stat.h> #include <sys/syscall.h> #include <sys/types.h> #include <errno.h> #define handle_error(msg) \ do { trace(msg); exit(0); } while (0) #define trace printf int createDir(const char* name) { int r = ::mkdir( name, 0777 ); if (r != 0) { trace("error r!=0 %d\n",errno); } r = open(name, O_RDONLY | O_DIRECTORY); if (r < 0) { trace("error create dir r <0\n"); } return r; } int main(int argc, const char * argv[]) { int r; int dir = createDir("test"); r = fsync(dir); trace("r = %d %d\n",r,errno); close(dir); return 0; } 

它给了我这个输出:

 r = -1 22 

我正在使用Linux版本。 2.6.32(我记得Ubuntu 10.04)

那么为什么我在文件夹中调用fsync时出现错误? 当我通过文件描述符调用fsync时,一切都很好

在我的情况下,问题是因为我已经在VirtualBox中安装Ubuntu,我从共享文件夹运行我的程序。 共享有VirtualBox的vboxsf文件系统不支持文件夹上的fsync。 感谢@twalberg