我正在处理一项网络作业,我们的任务是使用给定的协议(protocol)创建远程文件访问服务器。我的困难在于缺乏我能找到的信息来解释计算 open() 中 oflag 参数的位的过程。
我收到一条来自客户端的消息,要求我打开一个文件,在消息中,我解析了用于 oflag 中的标志的字符。具体是:
- R - O_RDONLY
- W - O_WRONLY
- RW - O_RDWR
- A - O_APPEND
- C - O_CREAT
- T - O_TRUNC
- E - O_EXCL
我在 Google 上四处搜索,搜索了按位运算、枚举标志、位标志、计算位标志等,但找不到有助于弄清楚如何为 oflag 创建位的东西。也许我只是不知道自己在寻找什么,而忽略了有用的信息?
有人可以吗:
- 给我指明方向/提供文档链接/如何计算位的示例/#我应该根据我解析的字符放入 oflags 或
- 告诉我标志的枚举类型以及它们应该进入的顺序
非常感谢您的帮助,如果我不清楚我的问题或我想做什么,请告诉我,我会尽快澄清。
最佳答案
O_...
标志是数字,每个数字都设置了不同的一位。例如,在我的系统中,它们在 fcntl.h
中定义为
#define O_RDONLY 00
#define O_WRONLY 01
#define O_RDWR 02
#define O_CREAT 0100 /* not fcntl */
#define O_EXCL 0200 /* not fcntl */
#define O_NOCTTY 0400 /* not fcntl */
#define O_TRUNC 01000 /* not fcntl */
#define O_APPEND 02000
您使用 |
(逻辑或)组合标志并将单个数字传递给 open
,并为您想要的每个选项设置所有位。所以例如打开("file",O_RDWR | O_CREAT)
。
如果需要,您也可以计算一个 int 并将其传递给 open。
int flags = 0;
if (...)
flags |= O_RDWR;
...
open('file', flags);
关于c - 如何计算 open() 中 oflag 的位标志/枚举标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2292561/