Что вызывает `read ()` в `c` не читает содержимое, которое вводится другими процессами из текущего` tty`? - PullRequest
0 голосов
/ 29 марта 2019

Я имитировал модуль check-password из исходного кода openssh, и он использует read() для получения содержимого из дескриптора файла текущего tty, вот код:

#include <unistd.h>  
#include <stdio.h> 
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>


int main ()   
{   
    int ttyfd=open("/dev/tty", O_RDWR);
    if(ttyfd>=0)
        printf("good to open\n");

    char * a;
    while(read (ttyfd,a,1)){
        printf("%s", a);
    }

    return 0;  
}  

Он работает в терминале так:

root@localhost:~/Desktop# tty
/dev/pts/0
root@localhost:~/Desktop# ./a.out 
good to open
11111111111
11111111111
^C
root@localhost:~/Desktop# 

В то время как другой терминал отправляет строки, перенаправляющие на первый, например:

root@localhost:~# echo 11111111111 >> /dev/pts/0
root@localhost:~# echo 11111111111 >> /dev/pts/0

Но read() на самом деле не работает, когда требуется ввести другой процесс. Так почему read() в c не читает содержимое, которое вводится другими процессами из текущего tty?

Возможно, я не очень ясно выразился в своем предыдущем вопросе , но это тот же вопрос, который я застрял.

...