C ++ Bars в параметрах функций - PullRequest
0 голосов
/ 29 ноября 2010
int fd = open(JOYSTICK_NAME, O_RDONLY | O_NONBLOCK);

Что означает полоса между O_RDONLY и O_NONBLOCK?Я сталкивался с этим в программировании OpenGL / GLUT, и мне было интересно узнать о семантике.

Ответы [ 5 ]

3 голосов
/ 29 ноября 2010

Это битовый оператор ИЛИ .Он принимает отдельные биты в O_RDONLY и объединяет их с битами в O_NONBLOCK и возвращает объединенное значение.

Например, предположим, что двоичное значение для O_RDONLY равно 11001100, а двоичное значение дляO_NONBLOCK равно 00001111. ИЛИ, если все вместе, получим 11001111.

2 голосов
/ 29 ноября 2010

Это побитовое ИЛИ из двух операндов.В этом случае оба операнда определены в 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)

Не очень захватывающий пример, но это то, что он делает ...

2 голосов
/ 29 ноября 2010

Это побитовый оператор. Используется для накопления битовых флагов.

1 голос
/ 29 ноября 2010

Это побитовое ИЛИ.Он принимает двоичное представление двух аргументов (O_RDONLY и O_NONBLOCK) и применяет к ним операцию OR, возвращая результат.

1 голос
/ 29 ноября 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...