繁体   English   中英

什么是POSIX,可以取代它的任何其他接口标准? [关闭]

[英]What is POSIX, any other interface standards which can replace it? [closed]

我对C和C ++编程的众多标准和接口感到困惑。 有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或旧的超级计算机上,所有类型的大小可能完全相同。 也不能保证一个字节有8位(也许它有8位以上)。

C标准的另一半指定标准库,例如每个头提供哪些功能。 例如, <stdlib.h>头必须定义malloc()函数。

用标准C编写的程序几乎可以在任何地方运行,只要你小心不要依赖非便携式结构。 但是,C标准并没有提供太多的功能......所以这些便携式程序除了打开文件或从控制台上的用户读取输入外,还做不了多少。

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

POSIX

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

在POSIX系统上,C实现有一些限制。 例如,在POSIX上:

  • 一个字节总是8位
  • 整数总是二进制补码
  • /字符始终用作路径分隔符
  • 通过设置errno来发出某些错误信号

POSIX还指定了标准库的一些附加内容,例如

  • 网络套接字
  • 创建新流程
  • 多线程编程
  • 内存映射IO

编写在POSIX上运行的程序可以在Linux,Unix,OS X或其他符合POSIX的系统上运行。 这些程序通常需要额外的工作才能在Windows上运行。 POSIX标准包括用于网络,进程创建,shell,终端和文件系统的接口。 编写复杂的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提供了大量接口,例如:

  • 网络套接字
  • 创建新流程
  • 多线程编程
  • 内存映射IO

这些接口与POSIX重叠,但函数调用大多不同。 例如,在Windows上,您可以使用CreateMutexEx()创建互斥锁,在POSIX上,可以使用pthread_mutex_init()创建互斥锁。 例外的是网络套接字,它们在Windows和POSIX之间大致相同。

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

MFC

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM