C++ c++;-解析文件路径中定义的所有符号链接 短版
如何从其中一个目录为符号链接的路径中获取解析路径: 例如: 假设path=/x/y/d/f1,其中y是指向/a/b的符号链接 因此,解析文件路径的结果将是: /x/a/b/d/f1 长版本 < >我想编写一个C++函数,将文件从DI1复制到DRI2(当然这不是实际问题,而是一个更大更复杂的问题的减少)。p> 在复制过程之前,我想删除dir2中所有要从dir1复制的文件。 假设我有:C++ c++;-解析文件路径中定义的所有符号链接 短版,c++,symlink,filepath,C++,Symlink,Filepath,如何从其中一个目录为符号链接的路径中获取解析路径: 例如: 假设path=/x/y/d/f1,其中y是指向/a/b的符号链接 因此,解析文件路径的结果将是: /x/a/b/d/f1 长版本 < >我想编写一个C++函数,将文件从DI1复制到DRI2(当然这不是实际问题,而是一个更大更复杂的问题的减少)。p> 在复制过程之前,我想删除dir2中所有要从dir1复制的文件。 假设我有: Dir1=/a/b/c/d Dir2=/x/y/d/ 假设我在dir1中有文件“f1”,在dir2中有文件“f
- Dir1=/a/b/c/d
- Dir2=/x/y/d/
有什么想法吗?如果您只是想避免上述冲突场景,那么创建一个金丝雀文件并尝试通过另一个构建的路径访问它会更容易。如果您的意思是一般性的问题,那么对于完整的dir操作 如果不清楚:如果创建/x/y/d/TEMP123456,如果它们实际指向相同的目录,则会显示为/a/b/c/d/TEMP123456(或相反)
对于单个文件,它可能更容易:在尝试在目标目录中删除源文件之前,先打开源文件以进行独占访问。(如果您将NFS系统添加到混合中,我不确定这有多可靠。)下面的链接将为您提供答案 您可以使用以下代码解析符号:
char buf[512];
int count = readlink("/x/y/d", buf, sizeof(buf));
if (count >= 0) {
buf[count] = '\0';
printf("%s -> %s\n", argv[1], buf);
}
在上述代码中,“d”路径组件应为符号链接。因此,您必须迭代并解析每个路径组件。不要试图避免冲突。正如我所说,我的问题比这更大,但是我想更好地理解你的建议。你能详细说明一下吗?“通过访问”是什么意思?您应该使用
memset(buf,0,sizeof(buf))
和readlink(“/x/y/d”,buf,sizeof(buf)-1)
,因为readlink不会在字符串中附加空终止符。