在Linux上规范C中不存在的路径

时间:2015-03-04 19:24:50

标签: c validation path

我正在为创建目录的c程序编写实用程序函数,但也会创建不存在的任何中间目录。我有这个代码工作,但我想转向注意改善用户输入格式。也就是说,我想在处理它之前规范输入路径,特别是要删除会破坏我当前实现的//

我知道realpath(3),但我的主要问题是,如果路径上的任何目录尚不存在,它将失败。命令行函数realpath(1)-m选项,它看起来像我想要的那样,但如果我可以避免它,我不想调用shell(否则我可以做{{} 1}}并完成它)。 Gnu mkdir -pfindutils/canonicalize.h,但我不知道如何直接复制源代码(不是不可能)。想法,建议?

我依赖于我的开发环境canonicalize_filename_modegcc 4.7.7

以下是我目前的实施情况。

rhel 6.6

2 个答案:

答案 0 :(得分:0)

它可能无法完全回答您的问题,但这里有另一种选择:

您可以使用path处理strtok字符串,将delim参数设置为'/'
通过这样做,strtok将返回中间目录名称(空终止:您可以摆脱\0调整),它将优雅地忽略//
然后,您可以添加“清理”检查(查找无效字符,路径名称太长等等)

答案 1 :(得分:0)

我找到了一个我相信涵盖所有案例的解决方法。我所做的是将realpath的调用移到do_mkdir函数中,这样它最多只有一个不存在的元素,用mkpath中的strdup替换它功能。我无法想到在部分路径上执行规范化会破坏任何事情的情况。