C - 来自绝对路径的文件大小

时间:2015-08-30 21:36:06

标签: c stat

问题:当文件路径相对到当前路径时,是否有办法使用绝对文件路径获取文件大小为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(),但没有理由说明为什么......

1 个答案:

答案 0 :(得分:1)

stat(2)允许您使用根目录中的完整路径名(如果路径以/开头)或相对路径指定文件(否则,请参阅path_resolution(7)) ,从您当前的目录。即使您不知道任何名称(如果您只有一个打开的文件描述符,并且您不知道该文件的名称),您也可以进行fstat(2)系统调用。 / p>

请注意以下事实:文件大小可以在您发出的stat(2)调用之间发生变化,以便知道文件大小和之后可以执行的操作。如果你想确保你的写作不会与他人混在一起,请考虑打开O_APPEND标志。