【问题标题】:stat to get the size of a file and copy it [duplicate]stat获取文件的大小并复制它[重复]
【发布时间】:2014-11-27 19:05:13
【问题描述】:

对于我的一项作业,我必须阅读一个文件(约 100 行)。 为了操作文件的内容并提取所有行,我使用函数 stat 分配了一个具有文件大小的缓冲区。我用这个缓冲区读取的函数读取了文件。 有人告诉我这个方法很脏。

为什么它被认为是脏的?我认为如果文件很短,这意味着 char 数组的大小是可以接受的,这意味着只有几个系统调用??

【问题讨论】:

  • 你应该问问那些说这个方法很脏的人。
  • 我应该问的。现在为时已晚。
  • 我认为您应该先检查该文件是否为常规文件。同样的功能stat 可以告诉你。除此之外,您可以安全地使用 stat 检查文件大小。请参阅man --- struct stat. st_size --- 对于常规文件,文件大小以字节为单位。对于符号链接,符号链接中包含的路径名的字节长度。
  • 关于您的尺寸问题,How do you determine the size of a file in C? 提供了各种方法和权衡分析,无需再次编写-仅在存在错误信息时更正。所以我标记为重复。关于复制——如果这是你的目标——见this question
  • 另一个可以认为"dirty"的原因是因为一次读取整个文件会将所有end of line characters读入缓冲区而无需翻译。 (例如所有 newlines(如果在 DOS/Windows 上 carriage returns))。

标签: c stat


【解决方案1】:

如果您的文件是符号链接而不是常规文件,您将获得“符号链接中包含的路径名的字节长度”。所以你不应该用它来获取文件长度。您可以在返回的 struct stat 的文档中看到这一点。 (http://pubs.opengroup.org/onlinepubs/009695399/basedefs/sys/stat.h.html)

【讨论】:

    猜你喜欢
    • 2018-05-08
    • 1970-01-01
    • 2011-09-29
    • 2011-08-22
    • 2018-07-05
    • 2019-04-10
    • 2015-01-28
    • 1970-01-01
    相关资源
    最近更新 更多