#include <string>
#include <iostream>
#include <fstream>
int main()
{
filebuf fb;
istream ifile(&fb);
ostream ofile(&fb);
fb.open( "local.db", ios::in | ios::out);
if ( ifile )
{
cout << "file opened" << endl;
string s;
/* class streambuf -> controlling input/output for a file
* six pointers:
* beg, curr, end of input and output stream
* streamoff -> fseek, ftell represented as long
* streampos -> describing position in the file (fpos_t in <stdio.h>)
* streampos += streamoff
*/
// strstreambuff:: seekoff
//
streampos spos = fb.pubseekoff(0, ios::beg);
streampos sprev = spos;
while ( getline( ifile, s) )
{
cout << sprev << " : ";
cout << spos << " : ";
cout << s << endl;
sprev = spos;
spos = fb.pubseekoff(0, ios::cur);
}
long where_to_pos = 17;
fb.pubseekoff(where_to_pos, ios::beg);
ifile.clear();
if ( getline( ifile, s) )
{
cout << where_to_pos << " : ";
cout << s << endl;
}
else
cerr << "last line" << endl;
}
else
cout << "error" << endl;
return 0;
}