在Linux(Ubuntu)上,关于文件路径的C open()系统调用遇到了一个小问题。
如果我把绝对路径即打开(“/ home / bob / Desktop / folder / file”,O_RDONLY);它打开很好
但是如果我在另一台计算机上运行我的程序,文件路径不正确,即用户名可能不是bob
所以,当我尝试打开(“./ Desktop / folder / file”,O_RDONLY);文件不会打开,这是正确的方法。我知道(〜/)不会工作,但不确定为什么(./)不会工作?
有什么建议吗?
谢谢,
答案 0 :(得分:2)
您必须使用getenv("HOME")
获取主目录的绝对路径名,然后构建路径名的其余部分(相对部分)。
另请注意,在用户的主目录下使用固定文件名是非常粗鲁的做法,除了隐藏的文件/目录(以点开头的文件/目录)。
答案 1 :(得分:1)
使用"./Desktop/folder/file"
时,它会在当前工作目录中开始查找。所以它取决于启动程序的目录。因此,如果当前工作目录不是$HOME
,则路径将与~/Desktop/folder/file
不同。
您可以使用getenv
函数获取HOME
环境变量的值,然后构建完整路径。
char* home = getenv("HOME");
if (home == NULL) goto error;
char* path = "/Desktop/folder/file"
size_t len = strlen(home) + strlen(path) + 1;
char* fullpath = malloc(len);
if (fullpath == NULL) goto error;
strcpy(fullpath, home);
strcat(fullpath, path);
int fd = open(fullpath, O_RDONLY);
free(fullpath);