2

Linux では、マスター側で疑似 tty を開いています。スレーブ側にはクライアントがありませんが、疑似 tty は私が彼に書き込んでいるすべてのものをエコーし​​ているように見えますが、これは私が期待しているものではありません。次のコードを検討してください。

int  main(int argc, char * argv[])
{
    int ptyfd;
    int rc;     /* return code */
    char readbuf[3];
    ptyfd = open("/dev/ptmx", O_RDWR | O_NOCTTY);
    die_on_error(ptyfd, "open ptmx");

    /* unlock and print slave name */
    rc = unlockpt(ptyfd);
    die_on_error(rc, "unlockpt");
    printf("Slave pts name : %s\n", ptsname(ptyfd));

    write(ptyfd, "C", 1);
    rc=read(ptyfd, readbuf, 1);
    die_on_error(rc, "read");
    printf("read returned %c\n",readbuf[0]);
    return 0;   
}

このプログラムを実行すると、読み取り呼び出しがブロックされることを期待しますが、代わりにすぐに返され、readbuf の内容は C になります。この動作を変更するにはどうすればよいですか? スレーブ側が開かれていない場合、マスター側に書かれた文字は消えるか、後でスレーブ側で読み取れるようにファイフォされます。

マスター側の属性を変更するのは正しい方法ですか?

4

3 に答える 3

1

マスター側は tty じゃないと思っていたのですが、どうやら tty だったので、 や などを呼び出してエコーを抑えることができtcgettattrますtcsetattr

于 2009-01-27T10:23:16.477 に答える
0

ブロッキングgetch()コールを使用できます。またgetch()、コンテンツをエコーし​​ません。

于 2009-11-12T14:00:20.003 に答える