提问人:Aaron Frantisak 提问时间:10/24/2020 更新时间:10/24/2020 访问量:121
在 C++ 中实现 unix 实用程序“head”
Implement unix utility "head" in C++
问:
我正在尝试在 C++ 中实现 unix 实用程序“head”。我正在覆盖 std::stringbuf::sync 并返回 eof()。但是在 ostream 上,eof 没有设置。更好的是,如果它抛出一个例外就好了。在线验证码
#include <iostream>
#include <sstream>
#include <vector>
class Head : public std::stringbuf {
public:
Head(std::size_t max) : max(max) {}
int_type sync() override {
if (lines.size() < max) {
lines.push_back(str());
str(std::string());
return 0;
}
return traits_type::eof();
}
const std::size_t max;
std::vector<std::string> lines;
};
int main(int, char*[]) {
auto head = Head{2};
std::ostream stream(&head);
for (auto i = 0; i < 3; ++i) {
stream << i << std::endl;
std::cout << "eof: " << stream.eof() << " good: " << stream.good() << std::endl;
}
}
输出:
eof: 0 good: 1
eof: 0 good: 1
eof: 0 good: 0 // eof should be 1?
答: 暂无答案
评论
eof
sync()
eof()
eof()