#include <iostream>
#include <fstream>
struct record {
int a, b;
record(int a=0, int b=0) : a(a), b(b) {}
};
std::ostream &operator<<(std::ostream &os, record const &r) {
os.write((char *)&r.a, sizeof(r.a));
os.write((char *)&r.b, sizeof(r.b));
return os;
}
std::istream &operator>>(std::istream &is, record &r) {
is.read((char *)&r.a, sizeof(r.a));
is.read((char *)&r.b, sizeof(r.b));
return is;
}
int main() {
static const char fname[] = "junk.dat";
std::fstream file(fname, std::ios::in | std::ios::out | std::ios::ate);
if (!file.is_open())
file.open(fname, std::ios::out);
file << record(1,2);
file << record(3,4);
file.seekg(0);
record r;
file >> r;
std::cout << r.a << ", " << r.b << '\n';
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KCnN0cnVjdCByZWNvcmQgeyAKICAgIGludCBhLCBiOwogICAgCiAgICByZWNvcmQoaW50IGE9MCwgaW50IGI9MCkgOiBhKGEpLCBiKGIpIHt9Cn07CgpzdGQ6Om9zdHJlYW0gJm9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtICZvcywgcmVjb3JkIGNvbnN0ICZyKSB7IAogICAgb3Mud3JpdGUoKGNoYXIgKikmci5hLCBzaXplb2Yoci5hKSk7CiAgICBvcy53cml0ZSgoY2hhciAqKSZyLmIsIHNpemVvZihyLmIpKTsKICAgIHJldHVybiBvczsKfQoKc3RkOjppc3RyZWFtICZvcGVyYXRvcj4+KHN0ZDo6aXN0cmVhbSAmaXMsIHJlY29yZCAmcikgeyAKICAgIGlzLnJlYWQoKGNoYXIgKikmci5hLCBzaXplb2Yoci5hKSk7CiAgICBpcy5yZWFkKChjaGFyICopJnIuYiwgc2l6ZW9mKHIuYikpOwogICAgcmV0dXJuIGlzOwp9CgppbnQgbWFpbigpIHsKICAgIHN0YXRpYyBjb25zdCBjaGFyIGZuYW1lW10gPSAianVuay5kYXQiOwoKICAgIHN0ZDo6ZnN0cmVhbSBmaWxlKGZuYW1lLCBzdGQ6Omlvczo6aW4gfCBzdGQ6Omlvczo6b3V0IHwgc3RkOjppb3M6OmF0ZSk7CiAgICAKICAgIGlmICghZmlsZS5pc19vcGVuKCkpCiAgICAgICAgZmlsZS5vcGVuKGZuYW1lLCBzdGQ6Omlvczo6b3V0KTsKICAgICAKICAgIGZpbGUgPDwgcmVjb3JkKDEsMik7CiAgICBmaWxlIDw8IHJlY29yZCgzLDQpOwogICAgZmlsZS5zZWVrZygwKTsKICAgIAogICAgcmVjb3JkIHI7CiAgICBmaWxlID4+IHI7CiAgICAgCiAgICBzdGQ6OmNvdXQgPDwgci5hIDw8ICIsICIgPDwgci5iIDw8ICdcbic7CiAgICByZXR1cm4gMDsKfQo=