有人可以向我解释I / O吗?从我收集的所有内容中,可以概括地总结出计算机与人类交互的方式,反之亦然。 I / O通道或“如何”可以运行色域,具体取决于外部设备和/或内部OS管理。
那么Ruby中的IO类做什么?它与Java或C有什么不同?
并以此代码为例:
x = IO.sysopen("file_name")
p x
根据文件描述符返回Fixnum
。在这种情况下,“file_name”是一个pdf文件并返回7.返回对象是什么意思?
答案 0 :(得分:1)
首先,sysopen
是一种与系统交互的非常低级的方式。对于Ruby中的正常输入和输出,您应该使用File.open
代替。
sysopen
返回的数字称为“文件描述符”。它本质上是数组的索引,但不是Ruby数组;它存在于由操作系统维护的进程内存部分内。第一个文件描述符,编号0,称为“标准输入”。默认情况下,输入调用将从此输入流中读取。第二个,称为“标准输出”;输出调用默认发送它们的输出。第三个,称为“标准错误”,这是错误消息的来源。在Ruby启动之前,所有这三个都是由操作系统打开的。通常它们都绑定到终端,但你可以通过shell重定向来改变它。
作为一般规则,当您打开一个额外的文件时,您打开的第一个文件将获得文件描述符3,接下来的4个,依此类推。因此,如果你得到7,那就意味着Ruby在到达你的代码时已经打开了4个其他文件。这就是它的意思。根据数字,您无法告诉任何有关打开文件的内容。你必须将该号码交给系统调用,该系统调用可以查看文件描述符数组以查看是什么。
但在Ruby中,您通常没有理由知道或关心文件描述符号。您处理IO
类的实例(及其类File
的子类,用于特定类型的I / O)。您可以调用IO
对象上的方法,它们会为您处理系统调用的详细信息。预定义常量STDIN
引用的对象(也是全局变量$stdin
的初始值)知道其文件描述符为0,因此您不必知道。