当前位置: 技术问答>linux和unix
下列代码为何终端不能显示输入的数据?
来源: 互联网 发布时间:2016-03-04
本文导语: 需要做个应用:自一任务(线程)从ps/2口获得输入数据。 下面是获取tty0 数据,想显示在屏幕上,可是测试发现程序不能结束. #include #include #include #include #include int main (void) { int fd; char ...
需要做个应用:自一任务(线程)从ps/2口获得输入数据。
下面是获取tty0 数据,想显示在屏幕上,可是测试发现程序不能结束.
#include
#include
#include
#include
#include
int main (void)
{
int fd;
char buf[100];
fd = open ( "/dev/tty0", O_RDWR);
if (!fd)
{
perror ( "open /dev/tty0");
exit (-1);
}
printf("please input stringn");
read (fd, buf, 5);
buf[5] = 0 ;
printf ("%sn", buf);
write (fd, "Hellon", strlen ( "Hellon"));
read (fd, buf, 100);
close (fd);
return 0 ;
}
下面是获取tty0 数据,想显示在屏幕上,可是测试发现程序不能结束.
#include
#include
#include
#include
#include
int main (void)
{
int fd;
char buf[100];
fd = open ( "/dev/tty0", O_RDWR);
if (!fd)
{
perror ( "open /dev/tty0");
exit (-1);
}
printf("please input stringn");
read (fd, buf, 5);
buf[5] = 0 ;
printf ("%sn", buf);
write (fd, "Hellon", strlen ( "Hellon"));
read (fd, buf, 100);
close (fd);
return 0 ;
}
|
tty0只是终端控制台中的一个,在命令行模式下键入tty察看当前所处的控制台名
程序里你可以使用ttyname获取控制台名,诸如:
……
char tName[100];
strcpy(tName, (char *)ttyname(STDOUT_FILENO));
fd = open(tname, O_RDWR);
……
最直接了当的做法是直接读写标准输入文件描述符0,标准输出文件描述符1,在里定义为STDIN_FILENO和STDOUT_FILENO,如:
……
//不需open
read(STDIN_FILENO, buf, 5);
//也不需close
……
程序里你可以使用ttyname获取控制台名,诸如:
……
char tName[100];
strcpy(tName, (char *)ttyname(STDOUT_FILENO));
fd = open(tname, O_RDWR);
……
最直接了当的做法是直接读写标准输入文件描述符0,标准输出文件描述符1,在里定义为STDIN_FILENO和STDOUT_FILENO,如:
……
//不需open
read(STDIN_FILENO, buf, 5);
//也不需close
……
|
什么叫不结束呢?
在我这里根本就不读入,直接结束了,我怀疑和输入缓冲区没有被清空有关
在我这里根本就不读入,直接结束了,我怀疑和输入缓冲区没有被清空有关