シリアルポートのwrite()がデータ転送を完了したタイミングを理解する

シリアルポートのwrite()がデータ転送を完了したタイミングを理解する

ユーザー空間からシリアルポートへの書き込みとIOピンの値を同期させる必要があります。 (まだカーネル空間ではそうできないからです。その他の問題)。私のコード(エラーチェックを省略)は次のとおりです。

char buf[3] = {'U','U','U'};
int fd = open("/dev/ttyS1", O_RDWR | O_NOCTTY); // supposed to be blocking
// fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) & ~O_NONBLOCK); <-- makes no difference
FILE *f = fopen("/sys/class/gpio/gpio200/value", "w"); // the relevant IO

// set IO
fprintf(f, "1");
fflush(f);
// send data 
write(fd, buf, sizeof(buf));
// unset IO
fprintf(f, "0");
fflush(f);

動作は、書込みの開始時にIOがすばやく1に切り替わり、再び戻ることです。つまり、write()データが実際に転送される前に返されます。

ここに希望はありますか?

答え1

tty使用する機器の場合tcdrain()ファイル記述子へ。

関連情報