【发布时间】:2019-07-04 09:06:37
【问题描述】:
char *path = "somefile.txt";
char resolved[PATH_MAX] = {0};
realpath(path, resolved);
printf("path is %s, resolved path is %s", path, resolved);
在linux env中,一切正常,但是如果是在cygwin env中构建的,resolved是“”(空),为什么?
【问题讨论】:
-
您是否按照此处所述检查了 errno:man7.org/linux/man-pages/man3/realpath.3.html
-
@mbieren 它打印“没有这样的文件或目录”
-
错误信息似乎很清楚。您是否声称文件“somefile.txt”实际上存在于当前目录中?
-
@varro 文件不存在。但即使文件不存在,realpath 也应该返回到
${current-folder}/somefile.txt的路径。它在 linux 环境下工作。 -
尝试为第二个参数传递 NULL 并使用 realpath() 的返回值。参见例如man7.org/linux/man-pages/man3/realpath.3.html 当返回值为 NULL 时,使用例如perror() 打印错误状态消息。确保 free() 任何非 NULL 返回值。请注意,将非空值作为第二个参数传递是不安全的,因为没有缓冲区长度检查,如果您的分配小于内核的 PATH_MAX 概念,则允许重写数据。还要注意 cygwin 使用 newlib,而不是 glibc,因此实现可能与 linux 不同。