我有一个关于在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)。
答案 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);