Использование O_RDWR vs O_RDONLY | O_WRONLY
В моей простой программе:
#include <iostream>
#include <unistd.h>
#include <fcntl.h>
#include <sstream>
using namespace std;
int main(int argc, char *argv[]) {
stringstream ss;
ss << "What does the quick brown fox say?" << endl;
int file_descriptor = open("/dev/tty", O_RDONLY | O_WRONLY);
write(file_descriptor, ss.str().c_str(), ss.str().size());
}
Я открываю поток терминала, используя комбинацию O_RDONLY
| O_WRONLY
, и это, похоже, работает нормально. Я получаю, что вы должны использовать O_RDWR
, потому что он дает более четкое смысловое значение, но мой вопрос заключается в том, зачем беспокоиться о создании целого другого флага, если уже работает соединение двух существующих флагов? Есть ли какая-то историческая причина для этого, или я просто что-то пропускаю, и это действительно не работает?
Ответы
Ответ 1
O_RDONLY | O_WRONLY
(по крайней мере, на моей машине Linux) - это не то же самое, что O_RDWR
.
#define O_RDONLY 00
#define O_WRONLY 01
#define O_RDWR 02
Тот факт, что он работает, кажется ошибкой/особенностью/совпадением, а не "он работает, потому что он должен работать именно так".