我写入标准输入,它出现在屏幕上(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
这是如何运作的?标准输入没有连接到键盘吗?
谢谢。
最佳答案
stdin
和 stdout
通常(至少在 Linux 系统上)引用文件系统中的同一实体,单个设备文件,例如 /dev/tty2
。这些"file"由特定驱动程序生成,该驱动程序会收到有关该文件的任何操作的通知。
当您从中读取内容时,驱动程序会访问(以某种方式,可能通过多个其他驱动程序)您前面的键盘,并将您键入的任何内容(通过中间的软件层过滤)返回为文件。
当您编写时,驱动程序知道它需要采取不同的操作,并通过驱动程序/显示服务器/终端仿真器的软件堆栈引导您的数据,最终将其显示给您。
因此,当您写入 stdin
时,驱动程序看到的只是您写入其设备文件,这意味着它应该显示您写入的内容。
也就是说,这肯定不是一种可移植的行为,所以不要指望这种情况会发生在不同的平台上。
关于c++ - 为什么写入标准输入有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32212183/