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

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

编辑:

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

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


当前回答

尝试包含io.h文件。它似乎是Visual Studio的unistd.h的对等版本。

其他回答

尝试包含io.h文件。它似乎是Visual Studio的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中声明

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

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

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

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

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