OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [libstdc++-v3/] [testsuite/] [27_io/] [basic_filebuf/] [showmanyc/] [char/] [9533-1.cc] - Blame information for rev 19

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 19 jlechner
// { dg-require-fork "" }
2
// { dg-require-mkfifo "" }
3
 
4
// Copyright (C) 2003 Free Software Foundation, Inc.
5
//
6
// This file is part of the GNU ISO C++ Library.  This library is free
7
// software; you can redistribute it and/or modify it under the
8
// terms of the GNU General Public License as published by the
9
// Free Software Foundation; either version 2, or (at your option)
10
// any later version.
11
 
12
// This library is distributed in the hope that it will be useful,
13
// but WITHOUT ANY WARRANTY; without even the implied warranty of
14
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
// GNU General Public License for more details.
16
 
17
// You should have received a copy of the GNU General Public License along
18
// with this library; see the file COPYING.  If not, write to the Free
19
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
20
// USA.
21
 
22
// 27.8.1.4 Overridden virtual functions
23
 
24
#include <unistd.h>
25
#include <signal.h>
26
#include <fcntl.h>
27
#include <sys/types.h>
28
#include <sys/stat.h>
29
#include <fstream>
30
#include <testsuite_hooks.h>
31
 
32
// libstdc++/9533
33
void test_01()
34
{
35
  using namespace std;
36
  using namespace __gnu_test;
37
  bool test __attribute__((unused)) = true;
38
  const char* name = "tmp_fifo1";
39
 
40
  const int count = 10000;
41
 
42
  signal(SIGPIPE, SIG_IGN);
43
  unlink(name);
44
 
45
  if (0 != mkfifo(name, S_IRWXU))
46
    {
47
      VERIFY( false );
48
    }
49
 
50
  int fval = fork();
51
  if (fval == -1)
52
    {
53
      unlink(name);
54
      VERIFY( false );
55
    }
56
  else if (fval == 0)
57
    {
58
      filebuf ofbuf;
59
      ofbuf.open(name, ios_base::in|ios_base::out);
60
      VERIFY( ofbuf.is_open() );
61
      sleep(1);
62
 
63
      for (int i = 0; i < count; ++i)
64
        ofbuf.sputc(i % 100);
65
 
66
      ofbuf.pubsync();
67
      sleep(1);
68
      ofbuf.close();
69
      exit(0);
70
    }
71
 
72
  filebuf ifbuf;
73
  ifbuf.open(name, ios_base::in);
74
  VERIFY( ifbuf.is_open() );
75
 
76
  for (int j = 0; j < count; ++j)
77
    {
78
      filebuf::int_type c1 = ifbuf.sbumpc();
79
      VERIFY( c1 == j % 100 );
80
    }
81
 
82
  filebuf::int_type c6 = ifbuf.sbumpc();
83
  VERIFY( c6 == filebuf::traits_type::eof() );
84
 
85
  sleep(2);
86
  ifbuf.close();
87
 
88
  unlink(name);
89
}
90
 
91
int
92
main()
93
{
94
  test_01();
95
  return 0;
96
}
97
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.