我有一个头文件,其中有一个函数load_files((,它应该将特定文件从项目目录复制到用户计算机中的某个路径中。问题是我找不到我项目目录中的文件,我甚至找不到项目目录。这是我的密码。
void load_database_files(const char * prog_dir) {
char cmd[100];
const char * proj_path = getenv("PWD");
sprintf(cmd, "cp -r %s%s %s", proj_path, "/src/database/warehouse.db", prog_dir);
system(cmd);
exit(1);
}
我希望PWD指向项目目录,从那里我可以找到文件,但它返回$HOME的路径。我该如何解决这个问题?我使用的是gnome生成器IDE。如果我需要提供任何其他相关信息,请告诉我。
阅读shell文档。PWD
是一个环境变量,shell在其中存储其当前目录的路径。因此,如果您在家(假设它是/home/user1
(并且chdir为$HOME/projects/project_a
,那么shell将把/home/user1/projects/project_a
存储在变量PWD
中。shell总是在执行内部shell命令cd
时更新此变量,因此您有两个备选方案:
- 请为项目目录使用不同的变量名。假设您的项目名为
babilony
,它位于$HOME/projects
中。一个好的名称是使用一个类似BABILONY_HOME
的环境变量,并在.profile
中用类似
export BABILONY_HOME="$HOME/projects/babilony"
然后使用以下安全性:
void load_database_files(const char * prog_dir) {
char cmd[100];
const char * proj_path = getenv("BABILONY_HOME"); /* this will point to your project's base directory */
sprintf(cmd, "cp -r %s%s %s", proj_path, "/src/database/warehouse.db", prog_dir);
/* this would expand to 'cp -r /home/user1/projects/babilony/src/database/warehouse.db <prog_dir>' */
system(cmd);
exit(1);
}
但不要使用PWD
变量,因为每次在文件系统上移动时它都会发生变化。