【发布时间】:2018-07-31 06:27:26
【问题描述】:
为什么在文件末尾查找会很有用?为什么 POSIX 允许在只读打开的文件中查找示例?
c++: http://en.cppreference.com/w/c/io/fseek 正则:https://www.unix.com/man-page/posix/3P/fseek/
我在 MinGW-64w 上测试的下一个代码
#include <cassert>
#include <cstdio>
#include <cstring>
int main() {
std::FILE* f = std::fopen("tmp_file.txt", "wb");
auto result = std::fwrite("1", 1, 1, f);
assert(result == 1);
result = std::fclose(f);
assert(result == 0);
f = std::fopen("tmp_file.txt", "rb"); // READ ONLY binary mode
result = std::fseek(f, 100500, SEEK_SET);
assert(result == 0); // WHY I can seek to not existing position in file?
// opended in READ_ONLY mode?
char buff[100500] = {0};
result = std::fread(&buff, sizeof(buff), 1, f);
printf("result = %zu, errno: %s ferror(f): %d feof(f): %d", result,
std::strerror(errno), std::ferror(f), std::feof(f) != 0);
return result;
}
【问题讨论】:
-
您的问题和代码似乎是关于 C++ 的,而您的链接是指向 C 资源的。 C 和 C++ 是不同的语言;你应该选择一个。
-
fseek()的更正确的 POSIX 链接是 pubs.opengroup.org/onlinepubs/9699919799/functions/fseek.html -
可能是历史先例的结合(Unix 允许),没有特殊理由禁止它。
-
@DavidBowling C 和 C++ 是不同的语言;你应该选择一个。在这种情况下,-C standard IO-C++ 几乎遵循 C。尽管在这种情况下,我认为这并不重要 - 我认为 为什么 i> 要么完全不可知,要么基于意见。
-
@AndrewHenle -- 要点。