c - 为什么我的文件的相对路径不能被我的应用程序识别?

标签 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 放在同一个目录中并在不使用其绝对路径的情况下调用它是有意义的。然而,相对路径没有得到认可。但是在我将 .cl 文件移动到父目录后,相对路径被接受并且应用程序开始正常运行。

为什么文件在父目录中被识别,而在当前目录中却不能?

最佳答案

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

关于c - 为什么我的文件的相对路径不能被我的应用程序识别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45424749/

相关文章:

c++ - 如何创建可执行文件以在特定处理器架构(而不是特定操作系统)上运行?

apache - 在 RHEL5 中配置 gcc - 在 $PATH 中找不到可接受的 C 编译器

path - 在 Windows 下的 git bash 中扩展 $PATH 变量

python - 在 windows7 上使用 virtualenv 设置 django

c - 压缩列存储中的稀疏矩阵与列 vector 的乘法

multithreading - 使用clEnqueueMapBuffer和 'querying whether the command has finished'的OpenCL主机的内存可见性

c - 有更优雅的写法吗? (一副牌)

c - Visual Studio 2010 链接器 [C]

c - 从 C 应用程序运行 shell 脚本

OpenCL 分析信息对于标记命令不可用