我正在为创建目录的c程序编写实用程序函数,但也会创建不存在的任何中间目录。我有这个代码工作,但我想转向注意改善用户输入格式。也就是说,我想在处理它之前规范输入路径,特别是要删除会破坏我当前实现的//
。
我知道realpath(3)
,但我的主要问题是,如果路径上的任何目录尚不存在,它将失败。命令行函数realpath(1)
有-m
选项,它看起来像我想要的那样,但如果我可以避免它,我不想调用shell(否则我可以做{{} 1}}并完成它)。 Gnu mkdir -p
有findutils/canonicalize.h
,但我不知道如何直接复制源代码(不是不可能)。想法,建议?
我依赖于我的开发环境canonicalize_filename_mode
和gcc 4.7.7
。
以下是我目前的实施情况。
rhel 6.6
答案 0 :(得分:0)
它可能无法完全回答您的问题,但这里有另一种选择:
您可以使用path
处理strtok
字符串,将delim
参数设置为'/'
。
通过这样做,strtok
将返回中间目录名称(空终止:您可以摆脱\0
调整),它将优雅地忽略//
。
然后,您可以添加“清理”检查(查找无效字符,路径名称太长等等)
答案 1 :(得分:0)
我找到了一个我相信涵盖所有案例的解决方法。我所做的是将realpath
的调用移到do_mkdir
函数中,这样它最多只有一个不存在的元素,用mkpath
中的strdup替换它功能。我无法想到在部分路径上执行规范化会破坏任何事情的情况。