open() 在 UBUNTU 上无法使用O_DIRECT标志
open() not working with O_DIRECT flag on UBUNTU
我正在尝试打开一个带有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
而失败。
相关文章:
- 即使使用调试编译标志,表达式也是"optimized out"
- 在 CMake 中为每个目标设置编译器/链接器标志
- File.cpp.o:OpenPose 标志 CMakeFiles/.. 的多重定义/main.cpp.o:首先在这里定
- 在轮班操作后使用携带标志
- 如何找出引入AVX标志的内容
- I2C 文件描述符上的 I2C 总线可写/可读标志
- C ++是否有C ++ 17 OSX 10.13.6的标志
- 每次使用带有LOCK_EX标志的LOCK_NB时,相同的程序/进程都会获取锁
- CMake 3.5 中的链接器标志位置
- 如何使用 gnu gcc 标志 -mpc32、-mpc64 和 -mpc80?
- 在 CMake 中添加全局编译标志
- -Wlifetime 标志的目的是什么?
- Visual Studio 19-17 库兼容性根据 GL 标志
- Java SWIG wrapper vs direct function calling
- 标志 |= f == s[i],这个语句会做什么?
- Visual Studio 中是否有来自代码块的编译器标志的类似物?
- 如何在 clang 的自动会议中检查支持编译标志
- 使用 boost::p rogram_options 指定多个标志
- 如何告诉 gcc 显示您使用的优化标志列表
- 生成文件中隐式规则中的 -c 标志出错