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
标志打开。
问题:当文件路径 相对于当前工作目录未知
这很可能被标记为重复,但我相信它与 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
标志打开。