问:是否有获取文件的大小为手段,off_t
具有绝对当文件路径文件路径相对不知道当前工作目录
这很可能被标记为重复,但我相信它的问题,如充分瓦里斯这还是这个,因为我不希望使用相对路径。
就像许多人一样(看来),我陷入了陷阱,即当寻求获取文件信息时,stat()
使用的是绝对路径名,而不是相对路径名(相对于当前工作目录)。我有一个文件的绝对路径,需要标识as的大小off_t
。我发现的第二个问题是绝对路径从错误的地方-也可能超过指向-asidePATH_MAX
从limits.h
?。
在此处找到的下面的函数提供了一种获取off_t
具有相对路径的方法的方法。但是这显然会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)允许您使用根目录中的完整路径名(如果路径以开头/
)或当前目录中的相对路径(否则,请参阅path_resolution(7))指定文件。即使您不知道任何名称(如果您只有打开的文件描述符,也不知道该文件的名称),也可以进行fstat(2)
系统调用。
请注意以下事实:文件大小可能会在stat(2)
您进行的知道文件大小的调用与之后执行的任何操作之间改变。O_APPEND
如果您想确保自己的写作不会被他人打扰,请考虑用标志打开。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句