标准流和操作系统

时间:2018-01-31 20:24:52

标签: java c++ c operating-system

我对Streams非常困惑。

1)操作系统(即Windows)是否提供通用标准输入流,并且所有语言都使用它(即Java将其称为System.in,同一标准输入流在c中用stdin引用)?

键盘是否有一些端口或物理地址,操作系统存储了它 在某个变量中,当程序需要时,它会根据语言给stdin或System.in提供相同的地址吗?

OR,

2)是否每种语言都有自己为标准流编写的API,当我们运行程序时,流将连接到输入设备?

该流与数据有什么区别?即物理端口或设备地址或什么?

另外,请说明System.in get" connected"是什么意思?我们运行它时编程。是什么"连接"这意味着什么?

请分享一些链接。

3 个答案:

答案 0 :(得分:5)

解释

“流”是一个包罗万象的词,就像“窗口”一样。所有流意味着有一些东西(“设备”)产生顺序数据或接受顺序数据。

例如,我可以通过简单地跟踪要生成的下一个字符来将字符串转换为输入流(生成数据)。当我们用完字符时,我们已经到达了流的末尾。 C ++:

struct my_hello_stream
{
  static const char* s = "Hello world!";
  int n;
  my_stream(): n(0) {}

  int get()
  {
    if (s[n]) return s[n++];
    return EOF;
  }
};

抽象

每个系统都有自己的抽象流方式。操作系统通过文件管道字符设备执行此操作,您可以打开它们进行读取或写入。如何完成这完全取决于操作系统的设计。请参阅OS API文档。

最重要的是编程语言,如C或C ++或Java或FORTRAN - 您可以命名。编程语言本身以便于该语言用户的方式定义流。在C中你有一个FILE*。在C ++中,您有std::iostream个。在Java中,您有I/O streams。无论如何,这都在OS流之上工作,以从文件等读取和写入数据。

此外,这些语言功能通常允许您使用这些流接口执行更强大的功能,例如将字符序列1234567转换为本机整数值,并对字符串执行这些操作。

除此之外,还有外部库允许我们像流一样处理与打印机的互联网连接和端口连接之类的事情。操作系统为我们处理的一些内容。其中有些没有。

TL;博士

一切都取决于。重要的是您可以访问的抽象 - 这通常是您的编程语言。因此,请阅读您的编程语言如何期望您打开文件以及读取和写入数据,然后就好像这样做。无论实际发生在底下的是魔术。

答案 1 :(得分:0)

什么是流?

Stream是一种抽象,它是输入源或输出目的地。例如,在UNIX中,所有内容都是文件,因此键盘将由只读文件表示(为什么?)。无论何时您想从键盘读取内容,只需使用键盘文件作为参数即可使用读取系统调用。

  

OS(即Windows)是否提供通用标准输入流和所有   语言使用它(即Java将其称为System.in并且相同   标准输入流在c)中用stdin引用?

OS仅提供非常基本的功能,例如读取和写入系统调用(取决于OS),可用于读取和写入原始字节。所有编程语言都使用此基本功能来创建抽象(例如将原始字节转换为特定字符集或在写入之前缓冲数据)。

答案 2 :(得分:0)

当程序开始执行操作系统时,会自动打开三个标准文本流(通道)并为它们提供常量文件指针。 您可以将流视为通道,而不是标准流,我们必须通过一些库函数(例如 c 中的 fopen)打开流,这会在您的程序和指定的文件中创建一个流。