2010-11-29 169 views
0
int fd = open(JOYSTICK_NAME, O_RDONLY | O_NONBLOCK); 

O_RDONLYO_NONBLOCK之间的酒吧是什么意思?我在OpenGL/GLUT编程中遇到过这个问题,我很好奇它的语义。C++酒吧功能参数

+0

你可能想看看一些基本的C++文本。在这里看到一个由C++人认为是好的列表:http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list – 2010-11-29 16:40:19

回答

3

这是bitwise OR operator。它采用O_RDONLY中的各个位并将它们与O_NONBLOCK中的位组合,并返回组合值。

例如,假设二进制值O_RDONLY是11001100和O_NONBLOCK二进制值是00001111.的OR-ing这些结合在一起产生11001111.

2

这是按位运算符。它用来累积比特位。

2

这是两个操作数的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) 

不是一个非常令人兴奋的例子,但它就是这样做的...

1

这是一个按位或。它采用两个参数(O_RDONLY和O_NONBLOCK)的二进制表示形式,并将OR操作应用于它们,并返回结果。