【问题标题】:Actual implementation of EOF different from -1EOF的实际实现不同于-1
【发布时间】:2018-07-12 23:30:33
【问题描述】:

POSIXEOF 定义为扩展为负值的宏:

标题应定义以下宏,该宏应扩展为具有 int 类型和负值的整数常量表达式:

EOF

文件结束返回值。

在我能找到的每个实现中,EOF总是定义为-1

虽然标准确实允许不同的值,但我找不到发生这种情况的任何具体实现,我想找到一个用于测试目的。1

1我可以自己实现,但我的真正目的是“在野外找到它”,由于无法证明它不存在,所以它是次优的我能想到的。

An almost identical question has already been asked,但是最后问了两个问题,接受的答案只回答了第二个问题(关于WEOF)。另一个用户对第一个问题的回答是否定的,但由于该问题仅限于常见的 C 环境,因此否定是可以说是正确的:-1 很可能用于任何合理的实现小字符型

由于我的问题是关于存在,实际回答它的唯一方法是提供一个示例,所以我将重新表述它:请提供一个现有实现的示例,其中@987654327 @。无论是 newlib 或 musl、PDP 或 VAX、Plan 9 或 Hurd,libc/硬件/操作系统与 POSIX 兼容或 ISO C 兼容 libc 的任何组合都是有效的。

【问题讨论】:

  • 假设它是-1 并继续进行更有趣的挑战
  • @bolov 假设它是-1 并继续进行更有趣的挑战 我会说“只需使用EOF 并继续...”跨度>
  • 只是不要包含您自己编写的个人库,这些库只是为了回答这个问题而编写的。 为什么这比偶然发现一个实现更有效other 人刚刚在互联网上发帖?无论哪种方式,这都是人为的情况。
  • 请注意,EOF 不是由 POSIX 定义的,而是由 C 标准定义的。即使在不符合 POSIX 的系统上(想想 MS/DOS 和 Windows),它也应该存在并具有负值。
  • OP:只是好奇,这次努力的目标是什么? IE。如果您找到 EOF != -1 的实现,这对您有什么不同?

标签: c posix language-lawyer eof


【解决方案1】:

懒惰的星期天,所以我发现了这个 https://github.com/xinu-os/xinu 附带这个 https://github.com/xinu-os/xinu/blob/master/include/stddef.h 列出这个

#define EOF (-2) /**< End-of-file (usually from read)    */

:-)

Xinu 可追溯到 1987 年的源代码在这里:https://www.tuhs.org//cgi-bin/utree.pl?file=Xinu7,不幸的是,它似乎使用 -1 作为 EOF 的值。 :-(

【讨论】:

  • 懒惰的星期天...哈哈。 This seems somehow apropos. ;-)
  • @AndrewHenle:我哥哥是一名机械工程师,空闲时间在旧车、房屋、洞穴中挖掘......我只是在我的领域内没有什么不同...... ;-)
  • 阅读这个stddef.h文件的其余部分,这看起来不像C的stddef.h,至少因为EOF不应该在那里定义。你确定这个 EOF 的使用方式与标准 C 的 EOF 一样吗?
  • @hvd:这可能不适合我提到的历史实现。尽管如此,对于按照上面链接的 github 的来源重新实现,他们似乎使用-2 代替EOF。看看lib/libxc/fgetc.clib/libxc/sscanf.c 并关注其中的内容。
  • @alk 这绝对不是 C 的 fgetc:它需要一个 int
猜你喜欢
  • 2011-10-02
  • 2017-04-26
  • 2018-12-30
  • 1970-01-01
  • 1970-01-01
  • 2019-07-11
  • 1970-01-01
  • 2019-10-05
  • 1970-01-01
相关资源
最近更新 更多