Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby目录是如何工作的?_Ruby_Io_Stream_Directory - Fatal编程技术网

Ruby目录是如何工作的?

Ruby目录是如何工作的?,ruby,io,stream,directory,Ruby,Io,Stream,Directory,目录-s与文件-s相比显得笨拙。许多方法类似于IO方法,但是Dir不是从IO继承的。例如,IO文档中的tell内容如下: 返回ios的当前偏移量(以字节为单位) 当通过正常的目录读取-ing和告诉-ing时,我会得到像346723732和422823816这样的大数字。我原本希望这些整数更像“数组”,只是一个简单的范围 这些是目录中包含的文件字节吗 如果没有,返回的数字如IO#tell是否有任何意义 另外,如果Dir-s不是流,为什么它们有open和close功能 关闭Dir是否与关闭正常IO

目录
-s与
文件
-s相比显得笨拙。许多方法类似于
IO
方法,但是
Dir
不是从
IO
继承的。例如,
IO
文档中的
tell
内容如下:

返回ios的当前偏移量(以字节为单位)

当通过正常的
目录
读取
-ing和
告诉
-ing时,我会得到像
346723732
422823816
这样的大数字。我原本希望这些整数更像“数组”,只是一个简单的范围

  • 这些是
    目录中包含的文件字节吗
  • 如果没有,返回的数字如
    IO#tell
    是否有任何意义
  • 另外,如果
    Dir
    -s不是流,为什么它们有
    open
    close
    功能
  • 关闭
    Dir
    是否与关闭正常
    IO
    一样重要
任何关于Ruby
Dir
如何工作的一般性解释都将不胜感激

更新另一个令人困惑的部分:如果
Dir
s不是
IO
s,为什么会引发
IOerror

关闭目录流。任何进一步访问目录的尝试都将引发IOError

还请注意,在文档中,它将其视为“目录流”。因此,这再次提出了一个问题,即它们是流还是非流,如果不是,为什么要使用命名约定?

Dir的文档告诉我们:

Returns the current position in dir.
没有指定位置的含义。返回值表示的内容可能会根据您使用的操作系统以及包含目录的文件系统的类型而有所不同。该值应被视为不透明,不要试图以任何方式解释它。它的唯一用途是能够将该值发送回操作系统,例如通过调用
Dir\seek

目录不仅仅是一个巨大的文件。更典型的是,它们只是从文件名映射到有关文件数据所在位置的信息

你不应该(据我所知,你不能)自己写目录。

目录的文档告诉我:

Returns the current position in dir.
没有指定位置的含义。返回值表示的内容可能会根据您使用的操作系统以及包含目录的文件系统的类型而有所不同。该值应被视为不透明,不要试图以任何方式解释它。它的唯一用途是能够将该值发送回操作系统,例如通过调用
Dir\seek

目录不仅仅是一个巨大的文件。更典型的是,它们只是从文件名映射到有关文件数据所在位置的信息


你不应该(据我所知,你不能)自己写目录。

所以在一些IRC聊天之后,我得出了以下结论:

Dir
对象不是
IO
Dir
不从IO类继承,只可读。仍然不确定在
#close
上引发
IOError
的原因

然而,打开的
Dir
是一个流 类Dir的对象是表示底层文件系统中的目录的目录流

另外,如果您检查是否有
Dir#close
,您将看到它调用了C函数
dirclose
<代码>手动关闭
打印:

closedir()
函数关闭与关联的目录流
dirp
。成功调用
closedir()
也会关闭基础文件 与
dirp
关联的描述符。目录流描述符
dirp
此呼叫后不可用

…使用
dirp
作为参数

因此,是的,实例化的
Dir
s将打开一个流,是的,
Dir
s将使用一个文件描述符,如果您不想依赖垃圾收集,则需要关闭它


非常感谢injekt和《红宝石郎》irc上的其他人

在一些IRC聊天之后,我得出了以下结论:

Dir
对象不是
IO
Dir
不从IO类继承,只可读。仍然不确定在
#close
上引发
IOError
的原因

然而,打开的
Dir
是一个流 类Dir的对象是表示底层文件系统中的目录的目录流

另外,如果您检查是否有
Dir#close
,您将看到它调用了C函数
dirclose
<代码>手动关闭
打印:

closedir()
函数关闭与关联的目录流
dirp
。成功调用
closedir()
也会关闭基础文件 与
dirp
关联的描述符。目录流描述符
dirp
此呼叫后不可用

…使用
dirp
作为参数

因此,是的,实例化的
Dir
s将打开一个流,是的,
Dir
s将使用一个文件描述符,如果您不想依赖垃圾收集,则需要关闭它


非常感谢injekt和《红宝石郎》irc上的其他人

Dir
不是从
IO
继承的。目录不是
IO
对象,它是指向文件的指针的组织结构。这与我的错误无关。我看到了类似的术语,并假设它发生了。只要看一下这些文件,它应该会让一切都很清楚:@Casper我已经更新了我的问题。@Casper和我一直在阅读这些文件,我来这里的唯一原因是我觉得解释得不够好。是谁
Dir
不是从
IO
继承的。目录不是
IO