将Unix移植到Windows - 使用pwd.h

时间:2013-03-12 20:36:18

标签: c windows unix mingw posix-api

我正在尝试使用MinGW编译libUnihan代码,但是遇到了需要移植的函数。该函数的目的是获得规范路径表示。它使用pwd.h(它是POSIX,而MinGW不是),所以它可以通过检索包含{{1}的passwd结构来解释使用'〜'来表示主目录。 }。我确实找到了一些信息here和一个pw_dir here的端口,但我仍然完全不知道如何处理这个问题。使用MinGW,我仍然有一个由realpath表示的主目录,位于~,但由于它不是POSIX,我没有/home/nate来帮助我找到这个家的位置目录是。

问:如何移植以下功能才能与MinGW一起正常使用?

pwd.h

1 个答案:

答案 0 :(得分:5)

目的是实现~[username]/重映射逻辑。这种代码在Linux / UNIX环境中很有意义,但最常见的用途是引用用户自己的主目录。

为方便起见,我只是添加对常见案例的支持 - ~/ - 即当前用户,而不是支持更一般的案例 - 在这种情况下失败并出现明显错误。

获取当前用户主目录的功能是SHGetFolderPath

#include <windows.h>

char homeDirStr[MAX_PATH];
if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, 0, homeDirStr))) {
    // Do something with the path
} else {
    // Do something else
}

如果用户查找失败,您粘贴的代码不会尝试替换该字符串,而只是返回NULL,因此您可以模拟它。