【问题标题】:Is popen standard C function?popen 是标准的 C 函数吗?
【发布时间】:2019-04-28 08:01:59
【问题描述】:

阅读函数popen

在标头stdio.h(标准标头)中, 它返回FILE*(标准IO结构,不像来自unistd.h的Unix函数), 但我在任何 C 标准参考网站上都找不到它。

那么它是标准的,还是某种 GCC 扩展?这是什么?

【问题讨论】:

  • 这是一个POSIX标准函数,而不是一个C标准函数。
  • 那为什么它在 stdio.h 而不是 unistd.h 什么的?
  • popen() 列在<stdio .h> 中,因为它返回FILE * 并且该类型在该标头中定义,而不是<unistd.h>。 POSIX 增加了许多标准 C 头文件。在<studio.h> 中还有fdopen()dprintf() 和(当然)pclose(),我怀疑这个列表是否详尽。

标签: c unix process c-standard-library


【解决方案1】:

来自您链接的手册页:

CONFORMING TO         top
       POSIX.1-2001, POSIX.1-2008.

       The 'e' value for type is a Linux extension.

它是POSIX 标准中定义的函数。类型的e 值是一个linux 扩展。

popen 是标准的 C 函数吗?

没有。 popen 不是标准的 C 函数,这意味着它没有在 C standard 中定义。

那么它是标准的,还是某种 GCC 扩展?这是什么?

这是一个标准的 POSIX 函数。它不是 GCC 扩展。这是一个函数。

那为什么它在 stdio.h 而不是 unistd.h 之类的呢?

popen 声明在 POSIX 兼容系统上包含 stdio.h 后可见,因为 POSIX 标准是这样说的。 (为什么不是posix/stdio.h 或像sys/stdio.h 这主要是出于历史原因。每个系统都只使用stdio.h。)

【讨论】:

    猜你喜欢
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 2011-08-12
    • 2016-05-03
    • 2021-04-26
    • 1970-01-01
    • 2010-12-19
    相关资源
    最近更新 更多