标准流和操作系统

use*_*837 0 c c++ java operating-system

我对Streams非常困惑.

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

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

要么,

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

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

另外,请告诉我们运行时系统的"连接"是什么意思."连接"在这里意味着什么?

请分享一些链接.

Dút*_*has 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;
  }
};
Run Code Online (Sandbox Code Playgroud)

抽象

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

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

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

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

TL;博士

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