为什么我的文件的相对路径不能被我的应用程序识别?
Why is the relative path of my file not being recognized by my application?
我正在尝试 运行 Eclipse 上的 OpenCL 代码(我正在使用 RHEL 6.6)。其中一个步骤涉及指定 OpenCL 文件(具有 .cl
扩展名)的路径以打开和读取它。
注意:我使用的代码来自 this github link。
我为执行上述任务编写的代码如下:
FILE *fp;
const char fileName[]= "/root/Downloads/tima_seq_version/src/invCosine.cl";
size_t source_size;
char *source_str;
/* Load kernel source file */
fp = fopen(fileName, "rb");
if (!fp) {
fprintf(stderr, "Failed to load kernel.\n");
exit(1);
}
上面的代码包含文件的绝对路径并且可以正常工作。但是,当我使用文件的相对路径 运行 相同的代码时,如下所示:
FILE *fp;
const char fileName[]= "./invCosine.cl";
size_t source_size;
char *source_str;
/* Load kernel source file */
fp = fopen(fileName, "rb");
if (!fp) {
fprintf(stderr, "Failed to load kernel.\n");
exit(1);
}
我在控制台上收到响应 Failed to load kernel
。我什至尝试将路径指定为 invCosine.cl
而不是 ./invCosine.cl
,但我一直收到相同的否定响应。
我的程序文件目录如下所示:
为什么文件的相对路径无法识别?
更新:
我把invCosine.cl
移出了src
目录,放到了主目录tima_seq_version
。之后,两个路径名(./invCosine.cl
和 invCosine.cl
)都让代码 运行 正确完成。
这是什么原因?我的 main.c
在目录 src
中。 将我的 .cl
放在同一个目录中并在不使用其绝对路径 的情况下调用它是有意义的。然而,相对路径没有得到认可。但是在我将 .cl 文件移动到父目录后,相对路径被接受并且应用程序开始正常 运行ning。
为什么在父目录下识别到文件,而在当前目录下识别不到?
相对路径重要的是进程的当前目录(由 getcwd()
返回),而不是可执行文件的目录。如果你想知道可执行文件在哪里,在 Linux 中你可以使用 readlink("/proc/self/exe",...)。其他 Unixen 也有类似的方法 (/proc/{pid}/file
...).
我正在尝试 运行 Eclipse 上的 OpenCL 代码(我正在使用 RHEL 6.6)。其中一个步骤涉及指定 OpenCL 文件(具有 .cl
扩展名)的路径以打开和读取它。
注意:我使用的代码来自 this github link。
我为执行上述任务编写的代码如下:
FILE *fp;
const char fileName[]= "/root/Downloads/tima_seq_version/src/invCosine.cl";
size_t source_size;
char *source_str;
/* Load kernel source file */
fp = fopen(fileName, "rb");
if (!fp) {
fprintf(stderr, "Failed to load kernel.\n");
exit(1);
}
上面的代码包含文件的绝对路径并且可以正常工作。但是,当我使用文件的相对路径 运行 相同的代码时,如下所示:
FILE *fp;
const char fileName[]= "./invCosine.cl";
size_t source_size;
char *source_str;
/* Load kernel source file */
fp = fopen(fileName, "rb");
if (!fp) {
fprintf(stderr, "Failed to load kernel.\n");
exit(1);
}
我在控制台上收到响应 Failed to load kernel
。我什至尝试将路径指定为 invCosine.cl
而不是 ./invCosine.cl
,但我一直收到相同的否定响应。
我的程序文件目录如下所示:
为什么文件的相对路径无法识别?
更新:
我把invCosine.cl
移出了src
目录,放到了主目录tima_seq_version
。之后,两个路径名(./invCosine.cl
和 invCosine.cl
)都让代码 运行 正确完成。
这是什么原因?我的 main.c
在目录 src
中。 将我的 .cl
放在同一个目录中并在不使用其绝对路径 的情况下调用它是有意义的。然而,相对路径没有得到认可。但是在我将 .cl 文件移动到父目录后,相对路径被接受并且应用程序开始正常 运行ning。
为什么在父目录下识别到文件,而在当前目录下识别不到?
相对路径重要的是进程的当前目录(由 getcwd()
返回),而不是可执行文件的目录。如果你想知道可执行文件在哪里,在 Linux 中你可以使用 readlink("/proc/self/exe",...)。其他 Unixen 也有类似的方法 (/proc/{pid}/file
...).