FileOutputStream を使用して、Vala のシリアル ポートに 1 バイトを書き込もうとしています。
var dev = File.new_for_path("/dev/ttyACM0");
var dev_io = dev.open_readwrite();
var dev_o = dev_io.output_stream as FileOutputStream;
dev_o.write({0x13});
dev_o.flush();
私の目的は、これを次のようにするecho -en '\x13' > /dev/ttyACM0
ことですが、奇妙な動作をするだけです。バイト 0x13 は複数回書き込まれているようです。/dev/ttyACM0 が数秒間ブロックされることもあれば、Vala プログラムの終了後にブロックされることもあり、まったくブロックされないこともあります。FileOutputStream をファイルに書き込み、これをシリアル ポートに送信すると、cat byte_file > /dev/ttyACM0
すべて問題ありません。
ファイルがデバイスであるという事実にGIOが苦労しているように思えます。私の問題は、/dev/ttyACM0 がプラグインされていて、非同期読み取りを行う場合に GIO を監視する必要があることです。