使用不同的标志设置打开文件失败(-1)

open file fail(-1) with different flag settings

我有一个关于在本机中使用带有不同标志的 open() 的问题 android。

因为我想打开一个文件并忽略缓存和缓冲区,以便直接访问硬件(SD 卡)。 如果标志设置是 O_CREAT | O_RDWR | O_NDELAY, S_IRUSR | S_IWUSR| O_DIRECT | O_SYNC .我可以得到一个肯定的文件描述符(fd)。

但是如果我将设置更改为 O_CREAT | O_RDWR | S_IRUSR | S_IWUSR| O_DIRECT | O_SYNC 结果是 fail(-1).

If the flag setting is O_CREAT | O_RDWR | O_NDELAY, S_IRUSR | S_IWUSR| O_DIRECT | O_SYNC . I can got a positive file descriptor(fd).

这种形式的用法不太正确

int open(const char *pathname, int flags, mode_t mode);

But if I change the setting to O_CREAT | O_RDWR | S_IRUSR | S_IWUSR| O_DIRECT | O_SYNC the result is fail(-1).

你所说的 "setting"flagsmode[=27= 的无效混合] 符号。此外,由于 O_CREAT 已在 flags 中指定,因此必须提供 mode 参数,但事实并非如此。
尝试将 模式 标志 分开:

open(pathname, O_CREAT | O_RDWR | O_DIRECT | O_SYNC, S_IRUSR | S_IWUSR);