【问题标题】:How do C and C++ Standard Library functions find the end of a file?C 和 C++ 标准库函数如何找到文件的结尾?
【发布时间】:2014-08-16 23:38:16
【问题描述】:

fseek(myFILEptr, 0, SEEK_END)myifstream.seekg(0, std::ios::end) 如何工作?

他们是否必须检查每个字符?它们的时间复杂度是否与文件大小成线性关系?它比这更聪明吗?典型的文件系统提供哪些信息来处理?

语言标准处理了哪些部分,哪些没有?对于这两个标准都没有的部分,有没有事实上的标准?

我在这里将 C 和 C++ 归为一组,因为我希望它们的答案几乎相同,甚至 C++ 函数可以并且可能经常根据 C 函数来实现。对吗?

【问题讨论】:

  • 通常,这些函数将委托给运行程序的操作系统。典型的操作系统将提供一种在硬件允许的情况下快速查找文件中任意偏移量的方法(磁带驱动器是慢查找硬件的一个示例)。 C 或 C++ 标准没有提供特定的复杂性保证。

标签: c++ c file-io filesystems c++-standard-library


【解决方案1】:

实际上,语言实现依赖于操作系统来处理这个问题(而操作系统又依赖于文件系统)。例如,POSIX 提供了lseek 系统调用。

因此,他们无法保证复杂性;它们依赖于操作系统/硬件实现。

【讨论】:

  • 他们也被允许失败,如果“文件”被证明是一个 FIFO,他们可能会这样做。
猜你喜欢
  • 2015-10-13
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
  • 2012-02-24
  • 1970-01-01
  • 2016-05-06
  • 1970-01-01
相关资源
最近更新 更多