我试图在while循环中使用read()作为条件从终端读取输入,但是直到循环结束,代码才被执行
这是我的密码:
#包括<;unistd.h>;
内部主(空)
{
char ch;
while(读(STDIN_FILENO,&;ch,1)==1&;ch!=“q”)
{
printf(“成功”);
}
返回0;
}
它给了我输出:
t
fgr
虚拟现实
Q
成功成功成功成功成功成功
即使在我尝试正常读取数据时,缓冲区中未读的数据最终也是这样
代码:
#包括<;unistd.h>;
内部主(空)
{
char ch;
读取(标准文件号和目录,1);
返回0;
}
终端输出
[email protected]:~/Desktop$/程序2 3
特德
[email protected]:~/Desktop$ed
为什么未读数据会成为下一个命令
因为数据仍然在内核的IO缓冲区中,而不是进程中的STDIO缓冲区中,所以下一个试图读取数据的进程(即shell进程)将读取未读数据。这是因为打开的句柄是从shell进程传递给您的进程的。如果你自己打开了tty设备,那就不会发生了