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
答案 0 :(得分:0)
好,如注释中所述Windows本身没有readlink()链接api。也就是说,样本中给出的代码正在执行某些实际上不需要程序直接处理的事情。 Linux系统api为您处理链接。另外readlink不会将null终止,它只会返回原始数据。也就是说,QFile提供了平台无关的api来解析链接。 let p = new SimplePeer();
p.on('signal', function (data) {
console.log('SIGNAL', JSON.stringify(data))
});
const turnOn = function () {
p.initiator = true;
};
turnOn();
提供了一种在Windows和UNIX上都获得链接目标的方法,而您的程序无需为此而烦恼OS的特定方面。
Windows进程不能像Linux / unix系统上那样仅使用一个衬套。实际上,窗口上实际上有两种不同类型的链接。我极力建议您在尝试进行跨平台I / O时使用Qt之类的框架。 Windows与典型的linux / unix系统完全不同。一方面,Linux / unix系统必须不是POSIX系统。
答案 1 :(得分:0)
Windows没有readlink(2)等效项,但 有realpath(3)等效项:GetFinalPathNameByHandleW()
。
另请参阅:"How do I get information about the target of a symbolic link?" by Ramond Chen。
伪代码如下,省略错误检查:
HANDLE hPath = CreateFileW(filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
DWORD len = GetFinalPathNameByHandleW(hPath, NULL, 0, FILE_NAME_OPENED);
WCHAR* realPathBuf = new WCHAR[len+1];
GetFinalPathNameByHandleW(hPath, realPathBuf, len, FILE_NAME_OPENED);
请注意,realPathBuf
可能是一个以\\?\
开头的“本地UNC”路径。