为什么我的文件的相对路径无法被我的应用程序识别?

时间:2017-07-31 19:57:44

标签: c path opencl filepath

我正在尝试在Eclipse上运行OpenCL代码(我正在使用RHEL 6.6)。其中一个步骤涉及指定OpenCL文件的路径(带有.cl扩展名)以打开并读取它。

注意:我使用的是this github链接中的代码。

我为执行上述任务而编写的代码如下:

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,并且我不断得到相同的负面回应。

此程序的文件目录如下所示:

enter image description here

为什么无法识别文件的相对路径?

更新

我将invCosine.cl移出src目录并将其放在主目录tima_seq_version中。之后,两个路径名(./invCosine.clinvCosine.cl)都让代码正常运行完成。

这是什么原因?我的main.c位于src目录中。 将我的.cl放在SAME目录中并使用其绝对路径调用它是有意义的。然而,相对路径没有得到认可。但是在我将.cl文件移动到父目录后,接受了相对路径并且应用程序开始正常运行。

为什么文件在父目录中被识别但在当前目录中没有被识别?

1 个答案:

答案 0 :(得分:2)

相对路径的重要性是进程的当前目录(由getcwd()返回),而不是可执行文件的目录。如果你想知道可执行文件的位置,在Linux中你可以使用readlink(“/ proc / self / exe”,...)。其他Unixen也有类似的方式(/proc/{pid}/file ...)。