Solaris 动态跟踪指南

cleanpath()

string cleanpath(char *str)

cleanpath() 创建包含由 str 表示的路径副本的字符串,但该字符串删除了某些多余元素。需要特别指出的是,路径中的 "/./" 元素已删除,并且 "/../" 元素已折叠。折叠路径中的 /../ 元素时将不考虑符号链接。因此,cleanpath() 可能会采用有效路径,但返回更短的无效路径。

例如,如果 str 为 "/foo/../bar" 且 /foo 为指向 /net/foo/export 的符号链接,则 cleanpath() 将返回字符串 "/bar",即使 bar 可能仅位于 /net/foo 中而不是 / 中。作出此限制是因为,cleanpath() 在触发探测器的上下文中调用,在此情况下不能进行完整的符号链接解析或使用任意名称。返回的字符串分配到临时内存外部,因此它们仅在子句的持续时间中有效。如果没有可用的足够临时空间,则不会执行 cleanpath,并且将生成错误。