c++ - open() 在 UBUNTU 上不使用 O_DIRECT 标志

标签 c++ linux ubuntu file-io disk

我正在尝试打开带有 O_DIRECT 标志的文件。在 Ubuntu 上,程序失败并显示 errno 22。我刚刚在具有双引导功能的同一台机器上安装了 Fedora,并且这段完全相同的代码在那里顺利运行。

我正在运行 Ubuntu 13.10,内核为 3.12.6,g++ 版本为 4.8.1,文件系统为 ext4。我刚刚安装的 Fedora 是版本 20,内核为 3.12.6。

#include <unistd.h>
#include <fcntl.h>
#include <iostream>
#include <errno.h>

using namespace std;

int main(void)
{
    int filedesc = open("testfile.txt", O_RDWR | O_CREAT | O_APPEND | O_DIRECT);
    if (filedesc < 0) {
    std::cout << "fail with errno: " << errno << std::endl;
        return -1;
    }
    return 0;
}

最佳答案

您可能启用了数据日志 ext4 功能。随着数据被记录,写入必须被缓冲(想一想),因此O_DIRECT 将失败并返回EINVAL

关于c++ - open() 在 UBUNTU 上不使用 O_DIRECT 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20964313/

相关文章:

c++ - freopen() 在 Mac 上不起作用

c++ - 编译错误链接dyld Symbol

linux - 通过 cURL 发送密码安全吗?

ubuntu - 未在服务器上生成Nuxt.js项目构建

php - 找不到 404 - 在 ubuntu 上使用 apache2 的网站

c - 将 stdout 重定向到文件在中间停止。 Linux

c++ - 从搜索 STL vector 的函数返回引用

c++ - 无法从映射中恢复指向成员函数的指针

c++ - 在 Ubuntu 中使用值大于 1000000 的 usleep 是否安全

Linux 文件名和文件通配