read()函数是如何工作的?(缓冲区中的未读数据会发生什么情况?)

我试图在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设备,那就不会发生了

发表评论