Я имитировал модуль 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
?
Возможно, я не очень ясно выразился в своем предыдущем вопросе , но это тот же вопрос, который я застрял.