C++酒吧功能参数
问题描述:
int fd = open(JOYSTICK_NAME, O_RDONLY | O_NONBLOCK);
O_RDONLY
和O_NONBLOCK
之间的酒吧是什么意思?我在OpenGL/GLUT编程中遇到过这个问题,我很好奇它的语义。C++酒吧功能参数
答
这是bitwise OR operator。它采用O_RDONLY
中的各个位并将它们与O_NONBLOCK
中的位组合,并返回组合值。
例如,假设二进制值O_RDONLY
是11001100和O_NONBLOCK
二进制值是00001111.的OR-ing这些结合在一起产生11001111.
答
这是按位运算符。它用来累积比特位。
答
这是两个操作数的bitwise OR。在这种情况下,操作数都在fcntl.h
定义:
/* File access modes for open() and fcntl(). POSIX Table 6-6. */
#define O_RDONLY 0 /* open(name, O_RDONLY) opens read only */
#define O_WRONLY 1 /* open(name, O_WRONLY) opens write only */
#define O_RDWR 2 /* open(name, O_RDWR) opens read/write */
...
/* File status flags for open() and fcntl(). POSIX Table 6-5. */
#define O_APPEND 02000 /* set append mode */
#define O_NONBLOCK 04000 /* no delay */
所以O_RDONLY
:
000 000 000 000 (0)
被进行或运算与O_NONBLOCK
:
100 000 000 000 (04000 in octal notation)
结果因此是:
100 000 000 000 (0400)
不是一个非常令人兴奋的例子,但它就是这样做的...
答
这是一个按位或。它采用两个参数(O_RDONLY和O_NONBLOCK)的二进制表示形式,并将OR操作应用于它们,并返回结果。
你可能想看看一些基本的C++文本。在这里看到一个由C++人认为是好的列表:http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list – 2010-11-29 16:40:19