我能够使用以下代码在 Win32 中通过文件句柄获取文件名:
std::wstring GetFileName() const
{
TCHAR buf[MAX_PATH];
// It is not clear what is the difference with FILE_NAME_NORMALIZED.
const DWORD len = GetFinalPathNameByHandle(m_hFile, buf, MAX_PATH, FILE_NAME_OPENED);
if (len > MAX_PATH)
{
return _T("<Too long path>");
}
return buf;
}
有没有办法在 POSIX 中做同样的事情?
如果我打开一个包含如下代码的文件:
auto fd = ::open("abc.dat", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
之后如何通过
fd
获取文件名?
Windows 不是比 Linux 更好吗?
[我]有办法在 POSIX 中[通过文件描述符获取文件名]吗?
不。可能有特定于操作系统的方法来执行此操作(如 Linux 中的
/proc
),但不是 POSIX。
如果您想知道打开/分配文件描述符的名称,您可以自己存储它以供以后查找。 (我的推断(可能是错误的)是 Windows 的 GetFinalPathNameByHandle
执行类似的查找,这就是它处理已删除或硬链接或重命名文件的方式 - 只需给出打开文件的名称。)