c - 如何在C中的系统函数中给出脚本的相对路径?
问题描述
我的 .c 代码在“src”目录中,而 space.sh 在“bin”目录中。在给定的代码中,我给出了 space.sh 的完整路径。当我运行代码时,它工作正常,但是当我在系统函数中使用相对路径时,它会出现路径未找到(系统(函数注释部分))之类的错误。这里出了什么问题?我只想要相对于我的 .c 代码(或相对于“练习”目录)的相对路径
#include <unistd.h>
#include <stdio.h>
int main(void)
{
//system("../bin/space.sh");
system("/home/amitk/projects/amit_bk/practice/bin/space.sh");
return 0;
}
解决方案
相对于 .c 代码的路径没有意义,因为 .exe 可以在任何地方结束,例如,如果您在没有代码的情况下分发应用程序。
如果您使用相对路径,它们将在 .exe 运行时相对于当前路径。如果在资源管理器中双击它,它将与 .exe 路径相同,但例如可以使用 .exe 作为“目标”创建快捷方式,但“开始于”位置不同,因此您永远不应该假设当前路径是 .exe 文件所在的位置。
argv[0]
如果您将 main 函数定义为 .exe 文件,则可以使用它来确定 .exe 文件的位置int main(int argc, char *argv[])
。因此,如果需要,您可以从中删除 .exe 文件名argv[0]
以确定 .exe 的路径。
推荐阅读
- angular - Formio 选择 URL 自定义标头问题
- git - 如何忽略 .gitignore 文件中的 dist 文件夹?
- c++ - 从静态库中使用时隐藏不透明结构的内容
- android - 如何强制软输入与底部锚定视图重叠?
- python - 将用户名传递给烧瓶并使用 sqlite3 检索数据
- c# - .NET Core 3.0 ILogger 测试
- hbase - 我们能否将 Azure HDInsight HBASE (HDI 4.0) 指向另一个 Data Lake V2 容器,然后指向默认容器
- postgresql - 升级到 scram-sha-256 密码验证后从 pgadmin 连接
- embedded-linux - Buildroot 自定义包未自动构建
- html - flexbox中css网格元素的自动高度