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