POSIX の答えは、送信されていない出力データ、読み取られていない入力データ、またはその両方をフラッシュすることtcflush()
です。出力が送信されるのを待つものもあります。それらは、POSIX 標準 (試用版の場合は 1988 年) があったときから POSIX に含まれていますが、それらを直接使用したことは覚えていません。tcdrain()
プログラム例
結果のプログラムが呼び出されるように、このコードをコンパイルしますtcflush
。
#include <stdio.h>
#include <unistd.h>
#include <termios.h>
int main(void)
{
char buffer[20] = "";
read(0, buffer, 1);
printf("%c\n", buffer[0]);
tcflush(0, TCIFLUSH);
read(0, buffer, 1);
printf("%c\n", buffer[0]);
tcflush(0, TCIFLUSH);
return 0;
}
ダイアログの例
$ ./tcflush
abc
a
def
d
$
医者が注文したもののようです。2 番目tcflush()
がないと、シェルはコマンドが見つからないと文句を言いますef
。tcflush()
必要に応じて、最初の読み取りの前にa を配置できます。私の単純なテストには必要ありませんでしたが、使用sleep 10; ./tcflush
してから先に入力した場合、違いが生じるでしょう.
x86/64 マシン上の RHEL 5 Linux、および Mac OS X 10.7.4 でテスト済み。