b17.1: Can't read without echo from /dev/tty

Assar Westerlund assar@sics.se
Sat Feb 1 09:40:00 GMT 1997


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
"gnu-win32-request@cygnus.com" with one line of text: "help".



More information about the Cygwin mailing list