微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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 /功能/巧合,而不是“它的工作原理,因为它应该这样工作”.

原文地址:https://www.jb51.cc/c/115204.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐