フラグの指定を FLAG1 | FLAG2 | FLAG3 と書くのはおかしいと思います。
FLAG1とFLAG2とFLAG3という意味なんだから
FLAG1 & FLAG2 & FLAG3 が正しいですよね。
C言語作った人は英語を知らなかったんでしょうか?