通过文件描述符获取文件名

问题描述 投票:0回答:1

我能够使用以下代码在 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
1个回答
0
投票

[我]有办法在 POSIX 中[通过文件描述符获取文件名]吗?

不。可能有特定于操作系统的方法来执行此操作(如 Linux 中的

/proc
),但不是 POSIX。

如果您想知道打开/分配文件描述符的名称,您可以自己存储它以供以后查找。 (我的推断(可能是错误的)是 Windows 的

GetFinalPathNameByHandle

 执行类似的查找,这就是它处理已删除或硬链接或重命名文件的方式 - 只需给出打开文件的名称。)

© www.soinside.com 2019 - 2024. All rights reserved.