Subject: b17.1: Can't read without echo from /dev/tty
From: [email-masked] (Assar Westerlund)

1 Feb 1997 10:35:39 -0800
Approved: [email-masked]
Distribution: cygnus
Message-ID: <[email-masked]>
Mime-Version: 1.0 (generated by tm-edit 7.68)
Content-Type: text/plain; charset=US-ASCII
Original-To: [email-masked]
X-Mailer: Gnus v5.2.40/Emacs 19.34
Original-Sender: [email-masked]

When using b17.1 under NT 3.51, I discovered that /dev/tty behaves
differently from stdin.  When trying to read from /dev/tty with echo
turned off, it just hangs.  The same program works fine with stdin.

This test case works:
----------------------------------------------------------------------
#include <stdio.h>
#include <unistd.h>
#include <termios.h>

int main ()
{
  struct termios t;
  char str[256];
  FILE *f = stdin;

  if (tcgetattr (fileno(f), &t))
    perror ("tcgetattr");
  t.c_lflag &= ~ECHO;
  if (tcsetattr (fileno(f), TCSANOW, &t))
    perror ("tcsetattr");
  fgets (str, sizeof(str), f);
  t.c_lflag |= ECHO;
  if (tcsetattr (fileno(f), TCSANOW, &t))
    perror ("tcsetattr");
  return 0;
}
----------------------------------------------------------------------

And this test case just hangs:
----------------------------------------------------------------------
#include <stdio.h>
#include <unistd.h>
#include <termios.h>

int main ()
{
  struct termios t;
  char str[256];
  FILE *f = fopen("/dev/tty", "r");

  if (tcgetattr (fileno(f), &t))
    perror ("tcgetattr");
  t.c_lflag &= ~ECHO;
  if (tcsetattr (fileno(f), TCSANOW, &t))
    perror ("tcsetattr");
  fgets (str, sizeof(str), f);
  t.c_lflag |= ECHO;
  if (tcsetattr (fileno(f), TCSANOW, &t))
    perror ("tcsetattr");
  return 0;
}
----------------------------------------------------------------------
-
For help on using this list, send a message to
"[email-masked]" with one line of text: "help".