Linux 是一个内核,Linux 系统上层是 GNU 软件。
两个本质毫无是无关关系的。
cygwin 的本质是提供一个基本函数接口,来让软件源代码可以不经修改或者小修改就可以在 Windows 上面编译使用。但其实这个实现,就是 POSIX (可移植 *** 作系统接口 Portable Operating System Interface,缩写为POSIX,多了个X)本身的设计目标。Windows 不支持 POSIX ,但其实微软发布过 POSIX 兼容组建。
只是 cygwin 这个兼容层基本都是抄 Linux 的软件实现,所以你可以在 cygwin 上面用兼容 Linux 的软件源代码来使用(注意是源代码不是本地运行)。而且 cygwin 也直接移植 Linux 上面常用的软件,所以使用感受和 *** 作方法也基本类似 Linux 。
但 Cygwin 绝对不是 Linux 。他也不是虚拟机。
大致上wsl是在内核实现的吧,cygwin是在用户态实现的。wsl的效率更高。比如说wsl里面创建一个进程就真的是个linux进程。而cygwin创建的则是Windows进程套个壳子,在运行configure脚本的时候,cygwin的性能是很差的。而wsl性能很好。
另外wsl对linux是二进制兼容的可以直接执行linux elf,而cygwin却需要重新编译的。
linux下的C语言编程与windows下的C语言编程从语法上看没有区别,但是C语言是有标准的,叫做C语言的必须符合国际标准。区别在于Windows通过头文件windows.h提供的Windows API函数,而Linux则提供了它自己的函数。
基本的C库函数,如stdio.h,string.h等也是标准化的,所有C编译器都必须提供这些函数,典型的如printf, strcpy等。
问题是在于,如果你要调用系统功能,比如在Windows下,则必须通过Windows API来实现,因此,这部分代码就不会和Linux下兼容。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)