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

O_RDONLYO_NONBLOCKの間のバーはどういう意味ですか?私はこれをOpenGL/GLUTプログラミングで遭遇しました。私はセマンティクスに興味がありました。関数のパラメータ内のC++バー

+0

が得られます。 SOのC++の人々が良いと思っているものの一覧はこちらをご覧ください:http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list –

+0

ありがとう!これを利用します。どのように上記の中間に2つの本だけがありますか? –

+0

あなたは本当ですか?私はC + +の質問に答えたが、あなたは基本的な演算子を知らないのが分かる? Pythonは、あなたがもっとよく知られているように見えますが、同じ演算子を持っています。それとも何か冗談ですか? – davka

答えて

3

これはbitwise OR operatorです。 O_RDONLYの個々のビットを取り、O_NONBLOCKのビットと組み合わせて、結合された値を返します。例えば

O_RDONLYのバイナリ値は11001100で、O_NONBLOCKのバイナリ値は00001111. OR-INGのであると仮定一緒にこれらはあなたがいくつかの基本的なC++の文章をチェックアウトする場合があります11001111.

2

ビット演算子またはビット演算子です。これは、ビットフラグを累積するために使用されます。

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とORされる:

100 000 000 000 (04000 in octal notation) 

結果ことである:

100 000 000 000 (0400) 

非常にエキサイティングな例ではありませんが、それはそれがやっていることです...

1

これはビット単位のORです。 2つの引数(O_RDONLYとO_NONBLOCK)のバイナリ表現をとり、それらにOR演算を適用して結果を返します。

関連する問題