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

时间:2010-04-27 16:42:48

标签: unix macos posix system-calls

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

2 个答案:

答案 0 :(得分:3)

我认为在几乎所有情况下添加/都应该足够了 - 即使使用...,额外/ s或符号链接,它应该只是正确的事。如果您真的想使用标准库执行此操作,可以使用realpath(3)进行路径规范化,但我不知道如何按照您的需要进行操作。

答案 1 :(得分:1)

根据您对文件的处理方式,以及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上很长一段时间了。)