C++ 在windows中替换readlink()函数

C++ 在windows中替换readlink()函数,c++,linux,readlink,C++,Linux,Readlink,readLink()在linux中存在,并在unistd.h中定义。windows中是否有类似类型的函数请提供,或者我们是否可以创建具有类似功能的函数。我想使用与readLink()相同的功能如果没有预定义的功能,请提供一个用户定义的功能来替换该功能 提供了代码的快照 char buffer[2048]; readlink("/proc/self/exe", buffer, 2048); std::stringstream ss;

readLink()在linux中存在,并在unistd.h中定义。windows中是否有类似类型的函数请提供,或者我们是否可以创建具有类似功能的函数。我想使用与readLink()相同的功能如果没有预定义的功能,请提供一个用户定义的功能来替换该功能 提供了代码的快照

        char buffer[2048];

        readlink("/proc/self/exe", buffer, 2048);

        std::stringstream ss;
        ss << buffer;
        std::string exeFile = ss.str();
        std::string directory;

        const size_t last_slash_idx = exeFile.rfind('/');
        if (std::string::npos != last_slash_idx)
        {
            directory = exeFile.substr(0, last_slash_idx);
        }
        return directory;
    #endif 
char缓冲区[2048];
读链接(“/proc/self/exe”,缓冲区,2048);
std::stringstream-ss;

注释窗口中所述的ssOk没有readlink()链接api。也就是说,示例中给出的代码所做的事情实际上并不需要程序直接处理。Linux系统api为您处理链接。此外,readlink不为null,它只返回原始数据。也就是说,QFile提供了一个独立于平台的api来解析链接
QFile::symLinkTarget
提供了一种在windows和unix上获取链接目标的方法,而您的程序无需处理此操作系统的特定方面

在linux/unix系统上,用于执行此操作的windows进程不是一行程序。事实上,windows上实际上有两种不同类型的链接。我强烈建议在尝试进行跨平台I/O时使用诸如Qt之类的框架。Windows与典型的linux/unix系统截然不同。首先,它不属于POSIX系统,linux/unix系统必须属于POSIX系统。

Windows没有等价物,但它确实有一个等价物:

另见:

伪代码如下,省略错误检查:

HANDLE hPath=CreateFileW(文件名、通用读取、文件共享读取、NULL、打开现有、文件标志、备份语义、NULL);
DWORD len=GetFinalPathNameByHandleW(hPath,NULL,0,文件名已打开);
WCHAR*realPathBuf=新的WCHAR[len+1];
GetFinalPathNameByHandleW(hPath、realPathBuf、len、文件名已打开);

请注意,
realPathBuf
可能是一个“本地UNC”路径,以
\\?\
开头

readlink
特定于Linux。您是否正在使用visual studio构建linux应用程序?如果没有,您希望
readlink
在没有符号链接的Windows上做什么?是的,我使用的是visual studio,该应用程序应该也适用于linux和Windows,但实际情况并非如此。为Windows构建的二进制文件不会在Linux中运行(没有其他魔法)。我的应用程序可以检测机器的平台,并且可以在没有用户输入的情况下工作。你没有抓住要点。Readlink及其功能与Windows无关。您需要了解linux版本在readlink上做了什么,而不仅仅是查看readlink本身。