c++ - 什么是POSIX,有什么其他的接口(interface)标准可以替代它?

标签 c++ c posix standards standard-library

关闭。这个问题需要更多focused .它目前不接受答案。












想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .

7年前关闭。




Improve this question




我对 C 和 C++ 编程的众多标准和接口(interface)感到困惑。有 ANSI C、ISO C、GLIBC、POSIX、Win32、MFC 等等。这些标准之间有什么区别,它们之间有什么关系?在什么情况下你会选择一个特定的标准?有没有关系图?

最佳答案

ANSI / ISO C

ANSI C/ISO C 是旨在支持极其广泛的不同系统的标准,并允许编译过去的遗留代码。我们可以称之为“标准C”。因为 C 是标准化的,所以有很多实现。

C 标准的一半是指语言本身,其中包括关于可用类型、可以使用什么语法等的具体保证。这些保证有时太宽泛而无法舒适地使用。例如,在标准 C 中,保证至少存在以下类型:

  • short int , 至少代表 -32767..+32767
  • int , 至少代表 -32767..+32767
  • long int , 至少代表 -2147483647..+2147483647

  • 列表中的每种类型都必须比上一种更宽,但系统有很多选择不同尺寸的余地。例如,在 DSP 或旧的 super 计算机上,所有类型的大小可能完全相同。也不能保证一个字节有 8 位(可能超过 8 位)。

    C标准的另一半规定了标准库,比如每个头文件提供了哪些功能。例如,<stdlib.h> header 必须定义 malloc()功能。

    用标准 C 编写的程序几乎可以在任何地方运行,只要您小心不要依赖不可移植的结构。然而,C 标准并没有提供太多的功能......所以这些可移植的程序只能在控制台上打开文件或读取用户的输入。

    标准 C 有多个版本。最常见的是 C89/C90、C99 和 C11。找到仅支持 C90(例如 MSVC)的系统并不少见。

    POSIX

    POSIX 是一个更大、更全面的标准,其中包括标准 C 作为其中的一部分。 POSIX 还指定了操作系统的组成部分。因为 POSIX 是标准化的,所以有很多实现。

    在 POSIX 系统上,对 C 实现有一些限制。例如,在 POSIX 上:
  • 一个字节总是 8 位
  • 整数总是二进制补码
  • /字符始终用作路径分隔符
  • 某些错误通过设置 errno 发出信号

  • POSIX 还指定了标准库的一些附加功能,例如
  • 网络 socket
  • 创建新进程
  • 多线程编程
  • 内存映射 IO

  • 为在 POSIX 上运行而编写的程序可以在 Linux、Unix、OS X 或其他兼容 POSIX 的系统上运行。这些程序通常需要额外的工作才能在 Windows 上运行。 POSIX 标准包括用于诸如网络、进程创建、shell、终端和文件系统之类的接口(interface)。编写复杂的 POSIX 程序(如 Web 服务器或命令行 shell)并不太难。

    POSIX 有多个版本。

    GLibc

    GLibc 是 GNU C 库。它实现了标准 C 库、C 库的 POSIX 扩展以及一些额外的功能。 GLibc 不是标准化的,只有一种实现。

    例如,GLibc 提供 asprintf() ,就像 sprintf()但它会自动分配缓冲区。

    使用 GLibc 扩展的程序通常不可移植,尽管某些扩展也可用于 BSD 系统。

    Win32

    Win32 是特定于 Windows 的 API。 API 提供了标准 C 中不可用的功能,例如用于创建图形用户界面的功能。 Win32 不是标准化的,只有两种实现(Windows 和 WINE)。 Win32 提供了大量的接口(interface),例如:
  • 网络 socket
  • 创建新进程
  • 多线程编程
  • 内存映射 IO

  • 这些接口(interface)与 POSIX 重叠,但函数调用大多不同。例如,在 Windows 上,您可以使用 CreateMutexEx() 创建互斥锁。 ,并在 POSIX 上使用 pthread_mutex_init() 创建互斥锁.对此的异常(exception)是网络套接字,它们在 Windows 和 POSIX 之间基本相同。

    为 Win32 编写的程序通常只能在 Windows 上运行,也可能在 WINE 上运行。

    MFC

    MFC 是 Microsoft 提供的一个库,它可以更轻松地编写 Win32 应用程序。它实际上已经过时,不应用于新项目。 MFC 不是标准化的,只有一种实现。

    关于c++ - 什么是POSIX,有什么其他的接口(interface)标准可以替代它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19697152/

    相关文章:

    c++ - 为虚拟方法实现组合行为

    c++ - 从使用 fmemopen() 打开的流中读取时的垃圾值

    c - 在 C linux 中使用管道的 2 路通信

    java - Java中的正则表达式可以分割特殊字符和字母数字

    c++ - 如何在Vxworks中正确运行Clock-gettime获取准确时间

    c++ - 对 cv::calcOpticalFlowPyrLK 的 undefined reference

    c++ - 隐式 VS 显式转换

    c++ - C++ 中的 "was not declared in this scope"

    c - 如何使用 bash 脚本重复将字符串输入程序?

    c - Linux:system() + SIGCHLD 处理 + 多线程