【发布时间】:2016-02-08 07:10:57
【问题描述】:
在 linux 上(Linux 3.16.0-38-generic #52~14.04.1-Ubuntu x86_64 GNU/Linux),当尝试使用 O_DIRECT 标志通过直接 io 写入文件时启用,好像写完后文件还是空的,请帮忙。
顺便说一下,我知道direct io通常应该与程序级缓存一起使用,下面的程序只是想对direct io进行测试。
direct_io_test.c:
// direct io test
#define _GNU_SOURCE
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
int direct_io_test() {
char *fp= "/tmp/direct_io.txt";
int flag = O_RDWR | O_CREAT | O_APPEND | O_DIRECT;
mode_t mode = 0644;
int fd = open(fp, flag, mode);
if (fd == -1) {
printf("Failed to open file. Error: \t%s\n", strerror(errno));
return errno;
} else {
printf("Succeed to open file, file descriptor: %d\n", fd);
}
// TODO ... seems didn't write to file,
write(fd, "hello\n", 6);
close(fd);
return 0;
}
int main(int argc, char *argv[]) {
direct_io_test();
return 0;
}
【问题讨论】:
-
您是否发布了错误的代码?没有提到
O_DIRECT。 -
大概在 fcntl.h 中?
-
@MartinJames 是的,来自
fcntl.h,需要#define _GNU_SOURCE。