open() 在 UBUNTU 上无法使用O_DIRECT标志

open() not working with O_DIRECT flag on UBUNTU

本文关键字:标志 DIRECT UBUNTU open      更新时间:2023-10-16

我正在尝试打开一个带有O_DIRECT标志的文件。在 Ubuntu 上,程序失败并显示 errno 22。我刚刚在同一台双启动的机器上安装了 Fedora,这个完全相同的代码在那里运行得很流畅。

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

#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而失败。