我正在尝试使用seek在c编程中获取文件大小。我不能使用fseek,stat.size或ftell,这是我需要运行的自定义操作系统unix。 我怎样才能通过使用seek找到filesize?可能吗?谢谢!
FILE *fd = open(argv[1], "r");
if(fd == NULL)
{
printf("Not able to open the file : %s\n", argv[1]);
return;
}
// Set the pointer to the end
seek(fd, 0, SEEK_END);
答案 0 :(得分:7)
seek
?你的意思是lseek
。看看manual page。 lseek
返回什么?
答案 1 :(得分:3)
如果你只是想知道使用offset = 0和whence = SEEK_END的构造是否会将文件偏移定位到文件的末尾,那么“是”你是对的,至少对于“标准f / lseek”来说我遇到了。
lseek
应直接返回文件偏移量。
对于fseek
,以下ftell
将为您提供文件偏移量。
答案 2 :(得分:1)
通常,open()
返回一个int,而不是FILE *
。您必须检查返回值> = 0. fopen()
<stdio.h>
返回FILE *
。此外,对于记录,fopen()
和fseek()
是C标准库的一部分。 UNIX open()是POSIX的一部分。因此,一般情况下,fopen()
/ fseek()
更具可移植性。
如果你真的在一个自定义的“类Unix”环境中,那就不再那么真实(即你有一个自定义API而不是unistd.h
)那么你在这里不会得到一个好的答案没有提供更多信息。你能告诉我们你在运行什么操作系统吗?
或者像Luther建议的那样,如果您使用普通lseek()
,请检查<unistd.h>
的返回值。