我正在将一个为Unix编写的相对简单的控制台程序移植到Windows平台(Visual c++ 8.0)。所有的源文件都包括“unistd.h”,这个文件并不存在。删除它,我收到关于缺少“srandom”,“random”和“getopt”原型的抱怨。 我知道我可以替换随机函数,而且我非常确定我可以找到/破解一个getopt实现。

但我相信其他人也遇到了同样的挑战。 我的问题是:有一个“unistd.h”到Windows的移植吗?至少有一个包含那些有本地Windows实现的函数-我不需要管道或分叉。

编辑:

我知道我可以创建自己的“unistd.h”,其中包含我需要的东西的替换——特别是在这种情况下,因为它是一个有限的集合。但由于这似乎是一个常见的问题,我想知道是否有人已经为更大的功能子集做了工作。

在工作中切换到不同的编译器或环境是不可能的——我只能使用Visual Studio。


当前回答

创建自己的unistd.h头文件,并包含函数原型所需的头文件。

其他回答

我建议使用mingw/msys作为开发环境。特别是在移植简单的控制台程序时。Msys在Windows上实现了一个类unix的shell, mingw是GNU编译器集合(GCC)和其他GNU构建工具到Windows平台的一个端口。这是一个开源项目,非常适合这项任务。我目前使用它来构建Windows XP的实用程序和控制台应用程序,它肯定有你正在寻找的unistd.h头文件。

安装过程可能有点棘手,但我发现最好从MSYS开始。

我在试图为getpid()(在unistd.h中定义)寻找Windows替代方案时偶然发现了这个线程。事实证明,包含process.h可以达到目的。也许这有助于人们在未来找到这条线索。

在Windows上与unistd.h等价的是Windows .h

创建自己的unistd.h头文件,并包含函数原型所需的头文件。

在c/cpp文件中输入stdout宏,并尝试找到stdout的定义。然后您将在corect_wstdio .h中看到stdout的实际宏定义等等

#define 标准丁 (__acrt_iob_func(0)) #define标准输出 (__acrt_iob_func(1)) #define 斯特德尔 (__acrt_iob_func(2))

所以我认为它应该是POSIX等同于windows。

Rand,srand分别相当于random, srandom,在stdlib.h中声明