Открывать нужно с помощью open.
Цитата
The two most important POSIX functions are tcgetattr(3) and tcsetattr(3).
И это правда. Для того, чтобы избавиться от эха нужно получить текущие атрибуты терминальной линии с помощью
tcgetattr, снять биты типа ECHO в поле c_lflag и обновить атрибуты с помощью
tcsetattr:
Код
Choosing Raw Input
Raw input is unprocessed. Input characters are passed through exactly as they are received, when they are received. Generally you'll deselect the ICANON, ECHO, ECHOE, and ISIG options when using raw input:
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
Choosing Raw Output
Raw output is selected by resetting the OPOST option in the c_oflag member:
options.c_oflag &= ~OPOST; When the OPOST option is disabled, all other option bits in c_oflag are ignored.
PS: Стоит, кстати, убедиться, что в терминалке точно не стоит режим эха.