什么是C语言的stdin?

时间:2016-06-09 07:51:19

标签: c

我想构建自己的scanf函数。基本思想是来自内存地址的数据并将其保存到另一个内存地址。

什么是stdin?它是像000ffaa这样的记忆地址吗? 如果它是一个内存地址是什么,那么我可以构建自己的scanf函数。谢谢!

3 个答案:

答案 0 :(得分:5)

不,stdin不是"内存地址"。

它是一个I / O流,基本上是一个操作系统级抽象,允许在stdout的情况下读取(或写入)数据。

您需要使用正确的面向流的I / O函数来从流中读取。

当然你也可以从RAM读取,所以最好编写自己的函数来要求读取一个字符的函数,然后你可以调整该函数来读取RAM或{{1} }。

类似的东西:

stdin

通常是合理的。 int my_scanf(int (*getchar_callback)(void *state), void *state, const char *fmt, ...); 指针是state函数所需的某个用户定义状态,并由getchar_callback()传递给它。

答案 1 :(得分:3)

stdin是一个“输入流”,它是从用户或文件中获取输入的抽象术语。它是一个位于实际文件处理和I / O之上的抽象层。流的目的主要是使您的代码在不同系统之间移植。

读取/写入内存的程度要低得多,而且与内存无关。为了以有意义的方式使用流,您必须知道某个编译器如何在内部实现流,这可能不是公共信息。在某些情况下,如在Windows中,流由操作系统本身定义,可以通过API调用进行访问。

如果您要构建自己的scanf函数,则必须查看特定操作系统的特定API函数,然后在这些函数之上构建自己的抽象层。

答案 2 :(得分:0)

  

在Unix上,一切都是文件

https://en.wikipedia.org/wiki/Everything_is_a_file

或者他们注意到

  

一切都是文件描述符

您可以在unix系统/dev/fd/0上找到谁是 addLayer() { this._broadcastService.addLayer(0); } 的符号链接,谁是角色特殊文件