Unix 是否有POSIX系统调用来解析文件系统路径?

Unix 是否有POSIX系统调用来解析文件系统路径?,unix,macos,posix,system-calls,Unix,Macos,Posix,System Calls,是否有POSIX系统调用来解析文件系统路径?我有路径的CWD,以及来自该CWD的文件路径。我无法使用chdir切换到目录,因为我需要同时解析来自多个线程的路径。我曾考虑在CWD和路径之间添加一个/,但出于某种原因,这感觉有点不对劲。这是解析相对路径的正确方法吗?我认为在几乎所有情况下添加/应该足够了-即使是、。、额外的/或符号链接,它也应该做正确的事情。如果你真的想用标准库实现这一点,你可以使用realpath(3)来实现路径规范化,但我不知道有什么方法可以做到你想要的。这取决于你想对文件做什么

是否有POSIX系统调用来解析文件系统路径?我有路径的CWD,以及来自该CWD的文件路径。我无法使用
chdir
切换到目录,因为我需要同时解析来自多个线程的路径。我曾考虑在CWD和路径之间添加一个
/
,但出于某种原因,这感觉有点不对劲。这是解析相对路径的正确方法吗?

我认为在几乎所有情况下添加
/
应该足够了-即使是
、额外的
/
或符号链接,它也应该做正确的事情。如果你真的想用标准库实现这一点,你可以使用
realpath(3)
来实现路径规范化,但我不知道有什么方法可以做到你想要的。

这取决于你想对文件做什么,如果你可以接受POSIX.1-2008中相对较新的添加内容,
openat
和朋友可能感兴趣:

int dirfd = open(desired_cwd_path, O_RDONLY);
int fd = openat(dirfd, file_relpath, O_RDONLY);
close(dirfd);
// ...use fd

(这些系统调用在Solaris和Linux上已经存在了很长一段时间。)

//////cwd/////file
是一个完全可以接受的posix路径(尽管您可能不想向用户显示)。是否要规范化路径?例如从
。/../bin/。/
/
?我很确定他想要realpath(),+1高。。。在Mac OS X上不可用,至少从10.5.7开始。相反,Linux手册页说“openat()和其他类似的系统调用后缀为“at”的支持有两个原因。[…]其次,openat()允许通过应用程序维护的文件描述符实现每个线程的“当前工作目录”