是什么原因导致c中的read()无法读取当前tty中其他进程输入的内容?

时间:2019-03-29 10:15:08

标签: c linux openssh tty

我从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中表达的不是很清楚,但这是我遇到的同样的问题。

0 个答案:

没有答案