我想构建自己的scanf函数。基本思想是来自内存地址的数据并将其保存到另一个内存地址。
什么是stdin?它是像000ffaa这样的记忆地址吗? 如果它是一个内存地址是什么,那么我可以构建自己的scanf函数。谢谢!
答案 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);
}
的符号链接,谁是角色特殊文件