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

C - size of a file from an absolute path

问题:当文件路径 相对于当前工作目录未知

这很可能被标记为重复,但我相信它与 this or this 等问题有很大不同,因为我不希望使用相对路径。

像许多人一样 - 看起来 - 我陷入了假设在寻找获取文件信息时 stat() 使用 absolute 而不是 的陷阱相对(到当前工作目录)路径名。我有一个文件的绝对路径,我需要将其大小标识为 off_t。我发现的第二个问题是绝对路径名 - 除了指向错误的地方 - 也可能超过 PATH_MAX from limits.h?.

下面找到的函数 here 提供了一种获取具有相对路径的 off_t 的方法。但是这显然会 return No such file or directory 通过带有绝对路径的 errno 因为它使用 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() 既不是线程安全的也不是好的做法;我应该避免更改当前工作目录。我也被建议避开 fseek() 但没有给出为什么..

的理由

stat(2) allows you to specify a file using it's full path name from the root directory (if the path starts with a /) or a relative one (otherwise, see path_resolution(7)),从您的当前目录。即使您不知道任何名称(如果您只有一个打开的文件描述符,并且您不知道该文件的名称),您也有可能进行 fstat(2) 系统调用。

请注意,文件大小可能会在您为了解文件大小而进行的 stat(2) 调用和之后可以执行的任何操作之间发生变化。如果您想确保您的写作不会被其他人穿插,请考虑使用 O_APPEND 标志打开。