111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Wrapper of C-language FILE struct -*- C++ -*-
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Copyright (C) 2000-2014 Free Software Foundation, Inc.
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This file is part of the GNU ISO C++ Library.  This library is free
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// software; you can redistribute it and/or modify it under the
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// terms of the GNU General Public License as published by the
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Free Software Foundation; either version 3, or (at your option)
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// any later version.
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This library is distributed in the hope that it will be useful,
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// but WITHOUT ANY WARRANTY; without even the implied warranty of
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// GNU General Public License for more details.
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Under Section 7 of GPL version 3, you are granted additional
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// permissions described in the GCC Runtime Library Exception, version
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 3.1, as published by the Free Software Foundation.
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// You should have received a copy of the GNU General Public License and
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// a copy of the GCC Runtime Library Exception along with this program;
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// <http://www.gnu.org/licenses/>.
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// ISO C++ 14882: 27.8  File-based streams
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/** @file bits/basic_file.h
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *  This is an internal header file, included by other library headers.
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *  Do not attempt to use it directly. @headername{ios}
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _GLIBCXX_BASIC_FILE_STDIO_H
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _GLIBCXX_BASIC_FILE_STDIO_H 1
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#pragma GCC system_header
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <bits/c++config.h>
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <bits/c++io.h>  // for __c_lock and __c_file
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <ios>
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertnamespace std _GLIBCXX_VISIBILITY(default)
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_GLIBCXX_BEGIN_NAMESPACE_VERSION
4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  // Generic declaration.
4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  template<typename _CharT>
4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    class __basic_file;
5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  // Specialization.
5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  template<>
5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    class __basic_file<char>
5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {
5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      // Underlying data source/sink.
5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      __c_file* 	_M_cfile;
5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      // True iff we opened _M_cfile, and thus must close it ourselves.
5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      bool 		_M_cfile_created;
6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    public:
6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      __basic_file(__c_lock* __lock = 0) throw ();
6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      __basic_file*
6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      open(const char* __name, ios_base::openmode __mode, int __prot = 0664);
6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      __basic_file*
6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      sys_open(__c_file* __file, ios_base::openmode);
6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      __basic_file*
7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      sys_open(int __fd, ios_base::openmode __mode) throw ();
7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      __basic_file*
7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      close();
7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      _GLIBCXX_PURE bool
7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      is_open() const throw ();
7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      _GLIBCXX_PURE int
8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      fd() throw ();
8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      _GLIBCXX_PURE __c_file*
8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      file() throw ();
8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      ~__basic_file();
8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      streamsize
8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      xsputn(const char* __s, streamsize __n);
8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      streamsize
9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      xsputn_2(const char* __s1, streamsize __n1,
9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	       const char* __s2, streamsize __n2);
9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      streamsize
9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      xsgetn(char* __s, streamsize __n);
9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      streamoff
9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      seekoff(streamoff __off, ios_base::seekdir __way) throw ();
9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      int
10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      sync();
10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      streamsize
10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      showmanyc();
10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    };
10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_GLIBCXX_END_NAMESPACE_VERSION
10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} // namespace
10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
111