我正在阅读一本书,它提到了这些子系统:
win32,os/2,posix,etc..
但我对这些符号没有任何感性认识,您能用简单的话解释一下吗?
我正在阅读一本书,它提到了这些子系统:
win32,os/2,posix,etc..
从NT(NT 3.1)开始,Windows能够支持当时存在的不同操作系统(或OS家族)的语义(1993年)。微软称它们为子系统(今天他们可能会称之为仿真层)。
当链接到一个子系统时,它决定了你的语义。例如,对于Win32子系统,文件名不区分大小写(foo.txt
和fOo.Txt
指的是同一个文件),设备文件(如con
或nul
)存在于每个目录中。对于POSIX子系统,文件名区分大小写,设备文件仅存在于一个位置。通过将现有(遗留)应用程序与不同于Win32
的子系统链接起来,这些应用程序会“感觉”更像相应的操作系统,并且移植工作会减少。
如果要知道EXE / DLL的子系统,可以在DependencyWalker中打开它-如果它(直接或间接)依赖于KERNEL32.DLL,则为Win32子系统;如果它(直接)依赖于NTDLL.DLL,则为本地子系统(请注意,KERNEL32.DLL本身将依赖于NTDLL.DLL,为Win32子系统提供兼容性层)。
这在今天大多数情况下已经过时了。我说“大多数”是因为微软在Windows 10周年更新中包括了一个新的“Linux子系统”(类似于本机、Win32或POSIX的子系统),它的行为与Linux的二进制等效,使得编译Linux应用程序以在Windows上运行变得容易(更确切地说,是在其Linux子系统上)。如果我们知道你指的是哪本书,可能会更有帮助!
更一般地说,Win32(即32位Windows,例如Windows NT 3.5或更高版本)、OS/2和POSIX家族都是操作系统。 (POSIX是UNIX类操作系统的标准API系列-请参见此处了解更多信息。)
听起来你描述的是一个可以在许多不同操作系统上运行并具有特定于操作系统的组件的程序-这些将是“子系统”。
然而,以这种方式创建应用程序似乎像是十五或二十年前做的事情。那时人们也会提到这三个操作系统家族...