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

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

编辑:

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

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


当前回答

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

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

其他回答

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

不,IIRC在Windows上没有getopt()。

Boost有program_options库…这很好。乍一看,这似乎有点过分,但它并不可怕,特别是考虑到它可以处理在配置文件和环境变量中设置程序选项以及命令行选项。

是的,有:https://github.com/robinrowe/libunistd

克隆存储库并将path\to\libunistd\unistd添加到INCLUDE环境变量。

在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中声明

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

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