最近需要使用open函数的O_DIRECT参数,直接操作磁盘,而不是读写IO缓存,犯了一些小错误,记录一下:
O_DIRECT参数使用的地方比较少,比较小众,需要的包含的头文件和特殊的宏定义
#include <unistd.h>
#include <sys/stat.h>
// O_DIRECT
#define __USE_GNU 1
#include <fcntl.h>
#include <sys/types.h>
打开或者创建一个文件:
fp = open(cFileName, O_RDWR | O_CREAT | O_DIRECT | O_TRUNC, S_IRUSR | S_IWUSR | S_IWGRP);
O_RDWR:以读写的方式打开
O_CREAT:如果文件不存在,就创建新文件
O_TRUNC:如果文件不为空,则将文件长度置0,再读写,其实就是打开后清空文件
O_DIRECT:直接操作磁盘,不通过IO缓存读取,用以测试磁盘是否正常
S_IRUSR | S_IWUSR | S_IWGRP :权限640
ps:也可以通过access函数判断文件是否存在,再用creat函数创建文件
ssize_t write(fp, cWriteMessage, length);
length长度不用包含\0;
ssize_t read(fp, cReadbuffer, length);
读取正常返回0
realpath(pcFileName, resolved_path)
该函数用于格式化标准输入路径,如果文件路径不存在,则会返回NULL,所以如果在open函数前用了这个函数,而文件又不存在,就要注意是不是直接返回了,导致后面没有执行,文件无法创建