代码之家  ›  专栏  ›  技术社区  ›  Dylan

C fopen模式参数

  •  5
  • Dylan  · 技术社区  · 12 年前

    为什么“模式”参数用于 fopen 用字符串给出的C?如果它是一个比特面具或类似的东西,(在我看来)会更有意义。字符串所需的开销是低效且不必要的。

    2 回复  |  直到 12 年前
        1
  •  3
  •   Yu Hao    12 年前

    C11§7.21.5.3 fopen功能

    论点 mode 指向一个字符串。如果字符串是以下字符串之一,则文件为 在指示模式下打开。否则,行为是未定义的。271)

    在脚注中:

    271)如果字符串以上述序列之一开头,则实现可能会选择忽略其余字符,或使用它们选择不同类型的文件(其中一些可能不符合7.21.2中的财产

    根据C99的基本原理,委员会认为实施可以选择使用 模式 除标志外:

    Rationale for International Standard — Programming Languages — C §7.19.5.3 fopen功能

    实现可以选择允许附加的文件规范作为模式字符串参数的一部分。例如,

    file1 = fopen(file1name, "wb,reclen=80");
    

    对于提供面向记录的二进制文件并允许程序员指定记录长度的系统来说,这可能是一个合理的扩展。

    GNU libc有一个扩展,允许 模式 包含 ccs=STRING 看见 glibc manual

        2
  •  1
  •   msam Ogulcan Orhan    12 年前

    如果它是一个比特掩码,那么它将更局限于未来的扩展。GNU C库已经允许10种不同的模式,以及MSVC 15。此外,它们还支持 ,ccs=string 使用位掩码无法实现的语法