gpt4 book ai didi

c++ - 为什么写入标准输入有效?

转载 作者:搜寻专家 更新时间:2023-10-31 02:20:47 25 4
gpt4 key购买 nike

我写入标准输入,它出现在屏幕上(0 个标准输入,1 个标准输出,2 个标准错误

const int SIZE=12;

int main()
{
int fd = open("input.txt", O_RDWR);
char buffer[SIZE] = "Hello world";
write(fd, buffer, SIZE - 1);

lseek(fd, 0, SEEK_SET);
char mem[SIZE];
read(fd, mem, SIZE - 1);
mem[SIZE] = '\0';

write(0, mem, SIZE - 1);
printf("\n");
write(1, mem, SIZE - 1);
printf("\n");
write(2, mem, SIZE - 1);
printf("\n");

return 0;
}

输出:

Hello world
Hello world
Hello world

这是如何运作的?标准输入不是接键盘吗?

谢谢。

最佳答案

stdinstdout 通常(至少在 Linux 系统上)指的是文件系统中的同一个实体,一个设备文件,例如 /dev/tty2。这些"file"由特定的驱动程序生成,该驱动程序会收到有关对该文件的任何操作的通知。

当你从它读取时,驱动程序访问(以某种方式,可能通过多个其他驱动程序)你坐在前面的键盘,并返回你键入的任何内容(由中间的软件层过滤)作为文件。

当你在写的时候,驱动程序知道它需要采取不同的 Action ,并通过驱动程序/显示服务器/终端仿真器的软件堆栈来引导你的数据,最终将它显示给你。

因此,当您写入 stdin 时,驱动程序看到的只是您写入其设备文件,这意味着它应该显示您写入的内容。


也就是说,这肯定不是一种可移植的行为,所以不要指望这种情况会发生在不同的平台上。

关于c++ - 为什么写入标准输入有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32212183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com