1. ホーム
  2. c++

[解決済み] O_RDWRとO_RDONLYの比較|O_WRONLYの使用方法

2022-03-04 03:06:32

質問

私の簡単なプログラムでは

#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 しかし、私の疑問は、既存の2つのフラグを結合することはすでに機能しているのに、なぜわざわざ別のフラグを作成するのでしょうか?何か歴史的な理由があるのでしょうか、それとも私が何かを見落としているだけで、実際には機能しないのでしょうか?

解決方法は?

O_RDONLY | O_WRONLY (少なくとも私のLinuxマシンでは)それは O_RDWR .

#define O_RDONLY         00
#define O_WRONLY         01
#define O_RDWR           02

動作するということは、"そのように動作するはずだから動作する"というより、バグ/特徴/偶然のように思われます。