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

时间:2015-01-27 07:43:47

标签: android file-io io filesystems embedded-linux

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

因为我想打开一个文件并忽略缓存&缓冲区,用于直接访问硬件(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 结果是失败(-1)。

1 个答案:

答案 0 :(得分:2)

  

如果标志设置为O_CREAT | O_RDWR | O_NDELAY,S_IRUSR | S_IWUSR | O_DIRECT | O_SYNC。我可以得到一个肯定的文件描述符(fd)。

表格

的用法不太正确
int open(const char *pathname, int flags, mode_t mode);
  

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

您所说的"设置" 标志模式符号的无效混合。此外,由于在标志中指定了O_CREAT,因此必须提供模式参数,但不是。
尝试将模式标记

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