int fd = open(JOYSTICK_NAME, O_RDONLY | O_NONBLOCK);
O_RDONLY
とO_NONBLOCK
の間のバーはどういう意味ですか?私はこれをOpenGL/GLUTプログラミングで遭遇しました。私はセマンティクスに興味がありました。関数のパラメータ内の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のであると仮定一緒にこれらはあなたがいくつかの基本的なC++の文章をチェックアウトする場合があります11001111.
ビット演算子またはビット演算子です。これは、ビットフラグを累積するために使用されます。
これは、bitwise OR operationです。
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
とORされる:
100 000 000 000 (04000 in octal notation)
結果ことである:
100 000 000 000 (0400)
非常にエキサイティングな例ではありませんが、それはそれがやっていることです...
これはビット単位のORです。 2つの引数(O_RDONLYとO_NONBLOCK)のバイナリ表現をとり、それらにOR演算を適用して結果を返します。
が得られます。 SOのC++の人々が良いと思っているものの一覧はこちらをご覧ください:http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list –
ありがとう!これを利用します。どのように上記の中間に2つの本だけがありますか? –
あなたは本当ですか?私はC + +の質問に答えたが、あなたは基本的な演算子を知らないのが分かる? Pythonは、あなたがもっとよく知られているように見えますが、同じ演算子を持っています。それとも何か冗談ですか? – davka