⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tfile.cc

📁 早期freebsd实现
💻 CC
字号:
// This may look like C code, but it is really -*- C++ -*-/* * a few tests for streams * */#include <stream.h>#ifndef _OLD_STREAMS#include <strstream.h>#include "unistd.h"#endif#include <SFile.h>#include <PlotFile.h>#include <std.h>#include <assert.h>class record{public:  char c; int i; double d;};ostream& operator<<(ostream& s, record& r){  return(s << "(i = " << r.i << " c = " << r.c << " d = " << r.d << ")");}void t1(){  char ch;  assert(cout.good());  assert(cout.writable());  assert(cout.is_open());  cout << "Hello, world via cout\n";  assert(cerr.good());  assert(cerr.writable());  assert(cerr.is_open());  cerr << "Hello, world via cerr\n";  assert(cin.good());  assert(cin.readable());  assert(cin.is_open());  cout << "enter a char:";  cin >> ch;  cout.put('c');  cout.put(' ');  cout.put('=');  cout.put(' ');  cout.put('"');  cout.put(ch);    cout << '"';  cout << char('\n');  assert(cin.good());  assert(cout.good());}void t2(){  int i;  short h;  long l;  float f;  double d;  char s[100];  cout << "enter three integers (short, int, long):";    cin >> h; cin >> i;     // cin.scan("%ld", &l);  cin >> l;  cout << "first  = " << h << " via dec = " << dec(h, 8) << "\n";  cout << "second = " << i << form(" via form = %d = 0%o", i, i);  cout.form(" via cout.form = %d = 0x%x\n", i, i);  cout << "third  = " << l  << " via hex = " << hex(l) << "\n";  assert(cin.good());  assert(cout.good());  cout << "enter a float then a double:";  cin >> f; cin >> d;  cout << "first  = " << f << "\n";  cout << "second = " << d << "\n";  assert(cin.good());  assert(cout.good());  cout << "enter 5 characters separated with spaces:";  cin >> s;  cout << "first  = " << s << "\n";  cin.get(s, 100);  cout << "rest   = " << s << "\n";  assert(cin.good());  assert(cout.good());}void t3(){  char ch;  cout << "\nMaking streams sout and sin...";#ifdef _OLD_STREAMS  ostream sout("streamfile", io_writeonly, a_create);#else  ofstream sout("streamfile");#endif  assert(sout.good());  assert(sout.is_open());  assert(sout.writable());  assert(!sout.readable());  sout << "This file has one line testing output streams.\n";  sout.close();  assert(!sout.is_open());#ifdef _OLD_STREAMS  istream sin("streamfile", io_readonly, a_useonly);#else  ifstream sin("streamfile");#endif  assert(sin.good());  assert(sin.is_open());  assert(!sin.writable());  assert(sin.readable());  cout << "contents of file:\n";  while(sin >> ch) cout << ch;  sin.close();  assert(!sin.is_open());}void t4(){    char s[100];  char ch;  int i;  cout << "\nMaking File tf ... "; #ifdef _OLD_STREAMS  File tf("tempfile", io_readwrite, a_create);#else  fstream tf("tempfile", ios::in|ios::out|ios::trunc);#endif  assert(tf.good());  assert(tf.is_open());  assert(tf.writable());  assert(tf.readable());  strcpy(s, "This is the first and only line of this file.\n");#ifdef _OLD_STREAMS  tf.put(s);  tf.seek(0);#else  tf << s;  tf.rdbuf()->seekoff(0, ios::beg);#endif  tf.get(s, 100);  assert(tf.good());  cout << "first line of file:\n" << s << "\n";  cout << "next char = ";  tf.get(ch);  cout << (int)ch;  cout.put('\n');  assert(ch == 10);  strcpy(s, "Now there is a second line.\n");  cout << "reopening tempfile, appending: " << s;#ifdef _OLD_STREAMS  tf.open(tf.name(), io_appendonly, a_use);#else  tf.close();  tf.open("tempfile", ios::app);#endif  assert(tf.good());  assert(tf.is_open());  assert(tf.writable());  assert(!tf.readable());#ifdef _OLD_STREAMS  tf.put(s);  assert(tf.good());  tf.open(tf.name(), io_readonly, a_use);#else  tf << s;  assert(tf.good());  tf.close();  tf.open("tempfile", ios::in);#endif  tf.raw();  assert(tf.good());  assert(tf.is_open());  assert(!tf.writable());  assert(tf.readable());  cout << "First 10 chars via raw system read after reopen for input:\n";  read(tf.filedesc(), s, 10);  assert(tf.good());  for (i = 0; i < 10; ++ i)    cout.put(s[i]);  lseek(tf.filedesc(), 5, 0);  cout << "\nContents after raw lseek to pos 5:\n";  while ( (tf.get(ch)) && (cout.put(ch)) );#ifdef _OLD_STREAMS  tf.remove();#else  tf.close();  unlink("tempfile");#endif  assert(!tf.is_open());}void t5(){  record r;  int i;  cout << "\nMaking SFile rf...";#ifdef _OLD_STREAMS  SFile rf("recfile", sizeof(record), io_readwrite, a_create);#else  SFile rf("recfile", sizeof(record), ios::in|ios::out|ios::trunc);#endif  assert(rf.good());  assert(rf.is_open());  assert(rf.writable());  assert(rf.readable());  for (i = 0; i < 10; ++i)  {    r.c = i + 'a';    r.i = i;    r.d = (double)(i) / 1000.0;    rf.put(&r);  }  assert(rf.good());  cout << "odd elements of file in reverse order:\n";  for (i = 9; i >= 0; i -= 2)  {    rf[i].get(&r);    assert(r.c == i + 'a');    assert(r.i == i);    cout << r << "\n";  }  assert(rf.good());#ifdef _OLD_STREAMS  rf.remove();#else  rf.close();  unlink("recfile");#endif  assert(!rf.is_open());}void t6(){  cout << "\nMaking PlotFile pf ...";  static const char plot_name[] = "plot.out";  PlotFile pf(plot_name);  assert(pf.good());  assert(pf.is_open());  assert(pf.writable());  assert(!pf.readable());  pf.move(10,10);  pf.label("Test");  pf.circle(300,300,200);  pf.line(100, 100, 500, 500);  assert(pf.good());#ifdef _OLD_STREAMS  cout << "(You may delete or attempt to plot " << pf.name() << ")\n";#else  cout << "(You may delete or attempt to plot " << plot_name << ")\n";#endif}void t7(){  char ch;  char mybuf[1000];#ifdef _OLD_STREAMS  cout << "creating string-based ostream...\n";  ostream strout(1000, mybuf);#else  cout << "creating ostrstream...\n";  ostrstream strout(mybuf, 1000);#endif  assert(strout.good());  assert(strout.writable());  strout << "This is a string-based stream.\n";  strout << "With two lines.\n";  strout.put(char(0));  assert(strout.good());  cout << "with contents:\n";  cout << mybuf;#ifdef _OLD_STREAMS  cout << "using it to create string-based istream...\n";  istream strin(strlen(mybuf), mybuf);#else  cout << "using it to create istrstream...\n";  istrstream strin(mybuf, strlen(mybuf));#endif  assert(strin.good());  assert(strin.readable());  cout << "with contents:\n";  while (strin.get(ch)) cout.put(ch);}void t8(){#ifdef _OLD_STREAMS  cout << "\nThe following file open should generate error message:";  cout.flush();  File ef("shouldnotexist", io_readonly, a_useonly);#else  ifstream ef("shouldnotexist");#endif  assert(!ef.good());  assert(!ef.is_open());}void t9(){  char ch;  static char ffile_name[] = "ffile";  {      cout << "\nMaking filebuf streams fout and fin...";      filebuf foutbuf;#ifdef _OLD_STREAMS      foutbuf.open(ffile_name, output);#else      foutbuf.open(ffile_name, ios::out);#endif      ostream fout(&foutbuf);      assert(fout.good());      assert(fout.is_open());      assert(fout.writable());      assert(!fout.readable());      fout << "This file has one line testing output streams.\n";#ifdef _OLD_STREAMS      fout.close();      assert(!fout.is_open());#endif  }  filebuf finbuf;#ifdef _OLD_STREAMS  finbuf.open(ffile_name, input);#else  finbuf.open(ffile_name, ios::in);#endif  istream fin(&finbuf);  assert(fin.good());  assert(fin.is_open());  assert(!fin.writable());  assert(fin.readable());  cout << "contents of file:\n";  while(fin >> ch) cout << ch;#ifndef _OLD_STREAMS  cout << '\n';#endif  fin.close();  assert(!fin.is_open());}main(){  t1();  t2();  t3();  t4();  t5();  t6();  t7();  t9();  t8();   cout << "\nFinal names & states:\n";#ifdef _OLD_STREAMS  cout << "cin:      " << cin.name()  << "\t" << cin.rdstate() << "\n";  cout << "cout:     " << cout.name() << "\t" << cout.rdstate() << "\n";  cout << "cerr:     " << cerr.name() << "\t" << cerr.rdstate() << "\n";#else  cout << "cin:      " << "(stdin)"  << "\t" << cin.rdstate() << "\n";  cout << "cout:     " << "(stdout)" << "\t" << cout.rdstate() << "\n";  cout << "cerr:     " << "(stderr)" << "\t" << cerr.rdstate() << "\n";#endif  cout << "\nend of test.\n";}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -