问题:当文件路径相对到当前路径时,是否有办法使用绝对文件路径获取文件大小为off_t
工作目录未知
这很可能被标记为重复但我相信它会因{I 3}或this等问题而变得充分,因为我不希望使用相对路径。
像许多人一样出现 - 我陷入了陷阱,假设在寻求获取文件信息时stat()
使用绝对而非相对(至当前的工作目录)路径名。我有一个文件的绝对路径,我需要将其标识为off_t
。我发现的第二个问题是绝对路径名 - 除了指向错误的位置 - 也可能超过PATH_MAX
的{{1}}。
找到下面的函数this提供了一种获取具有相对路径的limits.h
的方法。但是这显然会通过errno返回off_t
的绝对路径,因为它使用No such file or directory
。
stat()
因为我知道有人会问;我被告知#include <sys/stat.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
off_t fsize(const char *filename) {
struct stat st;
if (stat(filename, &st) == 0)
return st.st_size;
fprintf(stderr, "Cannot determine size of %s: %s\n",
filename, strerror(errno));
return -1;
}
既不是线程安全也不是良好做法;我应该避免更改当前的工作目录。我还被建议避开chdir()
,但没有理由说明为什么......
答案 0 :(得分:1)
stat(2)允许您使用根目录中的完整路径名(如果路径以/
开头)或相对路径指定文件(否则,请参阅path_resolution(7)) ,从您当前的目录。即使您不知道任何名称(如果您只有一个打开的文件描述符,并且您不知道该文件的名称),您也可以进行fstat(2)
系统调用。 / p>
请注意以下事实:文件大小可以在您发出的stat(2)
调用之间发生变化,以便知道文件大小和之后可以执行的操作。如果你想确保你的写作不会与他人混在一起,请考虑打开O_APPEND
标志。