c – 使用O_RDWR和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,因为它使得更清晰的语义感觉,但我的问题是为什么如果加入两个现有的标志已经工作,打算创建一个整个其他标志?这是有一些历史原因,还是我只是忽略某些东西,这真的不行吗?

解决方法

O_RDONLY | O_WRONLY(至少在我的Linux机器上)与O_RDWR不一样.
#define O_RDONLY         00
#define O_WRONLY         01
#define O_RDWR           02

事实上,它的工作原理似乎是一个bug /功能/巧合,而不是“它的工作原理,因为它应该这样工作”.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...