我从openssh源代码中模仿了check-password模块,它使用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
读取其他进程输入的内容?
也许我在previous question中表达的不是很清楚,但这是我遇到的同样的问题。