int fd = open(JOYSTICK_NAME, O_RDONLY | O_NONBLOCK);
What does the bar between O_RDONLY and O_NONBLOCK mean? I've encountered this in OpenGL/GLUT programming and I was curious on the semantics.  
int fd = open(JOYSTICK_NAME, O_RDONLY | O_NONBLOCK);
What does the bar between O_RDONLY and O_NONBLOCK mean? I've encountered this in OpenGL/GLUT programming and I was curious on the semantics.  
It's the bitwise-or operator. It's used to accumulate bitflags.
 
    
    It is a bitwise OR of the two operands. In this case the operands are both defined in 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 */
So O_RDONLY:
000 000 000 000  (0) 
is ORed with O_NONBLOCK:
100 000 000 000  (04000 in octal notation)
The result is therefore:
100 000 000 000  (0400)
Not a very exciting example, but that's what it is doing...
 
    
    This is the bitwise OR operator.  It takes the individual bits in O_RDONLY and combines them with the bits in O_NONBLOCK, and returns the combined value.
For example, suppose the binary value for O_RDONLY is 11001100 and the binary value for O_NONBLOCK is 00001111.  OR-ing these together yields 11001111.
 
    
    That is a bitwise OR. It takes the binary representation of the two arguments (O_RDONLY and O_NONBLOCK) and applies the OR operation to them, returning the result.
