c - 在新创建的文件夹上同步?

标签 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 版本。 2.6.32(我记得是 Ubuntu 10.04)

那么为什么我在文件夹上调用 fsync 时出错?当我使用传入的文件描述符调用 fsync 时,一切正常

最佳答案

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

关于c - 在新创建的文件夹上同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30232772/

相关文章:

c - C编程中如何指定txt文件中删除记录的位置

c - 使用 NULL 终止符和定界符拆分 char 数组的最佳方法?

c - C 的流行图表工具或方法

linux - 使用 scp 将几个文件(不同扩展名,例如 xml、crt.jks)从一台服务器复制到另一台服务器

c++ - QT CQTDeployer无法运行: config/controlScript.js (SOLVED)

linux - 如何让 Karma 与 Chrome 一起工作

java - Shell 脚本调用 java 可执行文件并捕获异常

c - a+i 和 a[i] 有什么区别

unix - 在 unix 中用另一个序列替换字符串模式

c++ - 如何在终端上以星号(*)的形式显示输入密码