[cs631apue] setting the password
Nick Smith
nsmith1 at stevens.edu
Sun Dec 8 21:56:54 EST 2013
Hey PA,
When you run with <test.txt this is redirecting the file's contents as
your stdin. So being as this is not a TTY (it's a pipe), I bet that's
why tcsetattr is failing. Check isatty(3) first.
-Nick
On Sun 08 Dec 2013 09:55:33 PM EST, Paul-Anthony Dudzinski wrote:
> Hello all,
>
> I am writing the function to take the password from the user using the
> termios (3). So far I have
>
> int get_pass(unsigned char *pwd)
> {
> struct termios oflags, nflags;
> char password[MAX_PASS_LEN];
> char pass2[MAX_PASS_LEN];
>
> /* disabling echo */
> tcgetattr(fileno(stdin), &oflags);
> nflags = oflags;
> nflags.c_lflag &= ~ECHO;
> nflags.c_lflag |= ECHONL;
>
> if (tcsetattr(fileno(stdin), TCSANOW, &nflags) != 0) {
> perror("tcsetattr");
> }
>
> printf("Password: ");
> fgets(password, sizeof(password), stdin);
> password[strlen(password) - 1] = 0;
>
> while( strcmp(password,pass2) != 0){
> printf("Again : ");
> fgets(pass2, sizeof(pass2), stdin);
> pass2[strlen(pass2) - 1] = 0;
> }
>
> memcpy(pwd,password,strlen(password));
>
> /* restore terminal */
> if (tcsetattr(fileno(stdin), TCSANOW, &oflags) != 0) {
> perror("tcsetattr");
> return EXIT_FAILURE;
> }
>
> return 0;
> }
>
>
> This works fine when I run this by itself in a separate main function.
> However when I put this in with my other code I get some errors that I
> do not know how to handle and makes my program unstable.
>
>
> pdudzins at rainman:~/cs631/hw5$ ./a.out -e < test.txt > out.txt
> tcsetattr: Inappropriate ioctl for device
>
> I am not sure how to appropriately handle the terminal using
> tcsetattr. Has anyone run into this problem?
>
>
> _______________________________________________
> cs631apue mailing list
> cs631apue at lists.stevens.edu
> https://lists.stevens.edu/mailman/listinfo/cs631apue
More information about the cs631apue
mailing list