函数是否处理相对路径?
换句话说,以下两段代码是否等效?
int NUM = scandir("/home/hello/wait/../pqr/../../hello", &LIST, 0, alphasort);int NUM = scandir("/home/hello", &LIST, 0, alphasort);如果没有,是否有一些简单的buit-in函数将/home/hello/wait/../pqr/../../hello转换为/home/hello?
发布于 2020-09-09 20:54:22
函数是否处理相对路径?
我相信答案是肯定的。从posix scandir我们只知道:
函数将扫描目录dir,.
来自posix定义:
3.129目录 包含目录条目的文件。同一目录中没有两个目录条目具有相同的名称。
scandir的参数是char *,所以它是一个字符串。从posix的定义中我们知道:
3.271路径名 用于标识文件的字符串。..。
另一个名为4.13 Pathname Resolution的部分深入研究了如何解析路径名,并告诉我们:
如果路径名没有以a开头,路径名的第一个文件名的前身将被视为进程相对路径名的当前工作目录。
因此,因为scandir将路径名取到目录中,并且由于路径名是如何解析的,所以您可以给出相对路径。
换句话说
这不是“另一个词”-你展示的两个路径名都是绝对的,而不是相对的。在路径名中使用点点不会使路径名相对。
以下两段代码是否等效?
是。
是否有一些简单的buit-in函数来将/home/hello/wait/./pqr/././hello转换为/home/hello?
在我所知道的任何编译器中,都没有“内置函数”来规范化路径名。为此,POSIX提供了一个完全正常的函数,称为realpath()。GNU库可以动态地分配返回的字符串,并且它还有名字。
https://stackoverflow.com/questions/63819060
复制相似问题