1

Linux OS で ac アプリケーションを実行しています。このアプリは、端末からキーボード キーを取得し、リモート サーバーに送信します。
以下のコードは、ターミナルを開きます。

    // save old terminal attributes
if (tcgetattr(0, &ttyold) != 0) {
    fprintf(stderr, "Failed getting terminal attributes\n");
    goto out;
}

ttynew = ttyold;

ttynew.c_iflag = 0;
ttynew.c_oflag = 0;

// disable canonical mode (don't buffer by line)
ttynew.c_lflag &= ~ICANON;

// disable local echo
ttynew.c_lflag &= ~ECHO;

ttynew.c_cc[VMIN] = 1;
ttynew.c_cc[VTIME] = 1;

// set new terminal attributes 
if (tcsetattr(0, TCSANOW, &ttynew) != 0) {
    fprintf(stderr, "Failed setting terminal attributes\n");
    goto out;

私はこのアプリを作成していません。このコードを理解しようとしているだけです。前のエンジニアがエコーを無効にした理由がわかりません。送信する必要があるデータは秘密ではありません。これには他にどんな意味があるでしょうか?パフォーマンス?バッファリングを無効にしますか?
また、「ttynew.c_lflag &= ~ICANON;」の説明をいただければ幸いです。コード。

前もって感謝します。

4

1 に答える 1

1

受信側がエコーしない場合は、これを有効にする必要があります。受信側がエコーする場合は無効にします。そうしないと、すべてが二重に表示されます。

ここですべてが説明されています:

標準モード: 入力は行ごとに使用可能になります。行区切り文字の 1 つ (NL、EOL、EOL2、または行頭の EOF) を入力すると、入力行が使用可能になります。

基本的に、データは文字単位ではなく、EOL の後に送信されます。

于 2013-07-23T07:22:18.993 に答える