C++ 中缓冲区溢出安全的 readlink()

问题:

你想使用 readlink() 获取符号链接指向的文件或目录,但你不知道存储符号链接目标所需的缓冲区大小。你不想分配大量内存(无论你选择多少,总是可能不够),但你不想冒缓冲区溢出的风险。

解决方案: 如果缓冲区太小,readlink() 返回 -1 且 errno == EINVAL。因此,你可以简单地以递增的缓冲区大小迭代调用 readlink。

此实现使用 std::string 并在出错时返回空字符串(在这种情况下 errno 仍然被设置)。如果文件不是符号链接,则返回 filename 参数。


Check out similar posts by category: C/C++