新建文件夹上的fsync?

时间:2015-05-14 08:33:44

标签: c linux unix

有人可以解释为什么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 ver。 2.6.32(我记得Ubuntu 10.04)

为什么我在文件夹上调用fsync时出错?当我用传入的文件描述符调用fsync时,一切都很好

1 个答案:

答案 0 :(得分:0)

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