C编程open()调用路径

时间:2011-03-16 16:55:02

标签: c

在Linux(Ubuntu)上,关于文件路径的C open()系统调用遇到了一个小问题。

如果我把绝对路径即打开(“/ home / bob / Desktop / folder / file”,O_RDONLY);它打开很好

但是如果我在另一台计算机上运行我的程序,文件路径不正确,即用户名可能不是bob

所以,当我尝试打开(“./ Desktop / folder / file”,O_RDONLY);文件不会打开,这是正确的方法。我知道(〜/)不会工作,但不确定为什么(./)不会工作?

有什么建议吗?

谢谢,

2 个答案:

答案 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);