我正在进行网络分配,我们的任务是使用我们提供的协议创建远程文件访问服务器。我遇到的困难是我找不到可以解释在open()中计算oflag参数位的过程。
我从客户端收到一条消息来打开一个文件,在消息中我解析了要在oflag中使用的标志的字符。具体来说,他们是:
我绕过谷歌搜索按位操作,枚举标志,位标志,计算位标志等等,但找不到有助于确定如何为oflag创建位的内容。也许我只是不知道我在寻找什么,忽略了有用的信息?
有人可以请:
非常感谢你的帮助,如果我不清楚我的问题或我想做什么,请告诉我,我会尽快澄清。
答案 0 :(得分:4)
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
,并为所需的每个选项设置所有位。所以例如open("file", O_RDWR | O_CREAT)
。
如果需要,您可以计算一个int并将其传递给open。
int flags = 0;
if (...)
flags |= O_RDWR;
...
open('file', flags);
答案 1 :(得分:0)
通常的表达方式类似于O_RDWR | O_CREAT
。请注意O_RDWR
正是O_RDONLY | O_WRONLY
您可以这样做:
char *flags = "r";
int oflag = 0;
if (strchr(flags,'r')) oflag |= O_RDONLY;
依旧等待其余的旗帜。