1*404b540aSrobert // Wrapper of C-language FILE struct -*- C++ -*- 2*404b540aSrobert 3*404b540aSrobert // Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 4*404b540aSrobert // Free Software Foundation, Inc. 5*404b540aSrobert // 6*404b540aSrobert // This file is part of the GNU ISO C++ Library. This library is free 7*404b540aSrobert // software; you can redistribute it and/or modify it under the 8*404b540aSrobert // terms of the GNU General Public License as published by the 9*404b540aSrobert // Free Software Foundation; either version 2, or (at your option) 10*404b540aSrobert // any later version. 11*404b540aSrobert 12*404b540aSrobert // This library is distributed in the hope that it will be useful, 13*404b540aSrobert // but WITHOUT ANY WARRANTY; without even the implied warranty of 14*404b540aSrobert // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15*404b540aSrobert // GNU General Public License for more details. 16*404b540aSrobert 17*404b540aSrobert // You should have received a copy of the GNU General Public License along 18*404b540aSrobert // with this library; see the file COPYING. If not, write to the Free 19*404b540aSrobert // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 20*404b540aSrobert // USA. 21*404b540aSrobert 22*404b540aSrobert // As a special exception, you may use this file as part of a free software 23*404b540aSrobert // library without restriction. Specifically, if other files instantiate 24*404b540aSrobert // templates or use macros or inline functions from this file, or you compile 25*404b540aSrobert // this file and link it with other files to produce an executable, this 26*404b540aSrobert // file does not by itself cause the resulting executable to be covered by 27*404b540aSrobert // the GNU General Public License. This exception does not however 28*404b540aSrobert // invalidate any other reasons why the executable file might be covered by 29*404b540aSrobert // the GNU General Public License. 30*404b540aSrobert 31*404b540aSrobert // 32*404b540aSrobert // ISO C++ 14882: 27.8 File-based streams 33*404b540aSrobert // 34*404b540aSrobert 35*404b540aSrobert /** @file basic_file.h 36*404b540aSrobert * This is an internal header file, included by other library headers. 37*404b540aSrobert * You should not attempt to use it directly. 38*404b540aSrobert */ 39*404b540aSrobert 40*404b540aSrobert #ifndef _BASIC_FILE_STDIO_H 41*404b540aSrobert #define _BASIC_FILE_STDIO_H 1 42*404b540aSrobert 43*404b540aSrobert #pragma GCC system_header 44*404b540aSrobert 45*404b540aSrobert #include <bits/c++config.h> 46*404b540aSrobert #include <ios> 47*404b540aSrobert 48*404b540aSrobert _GLIBCXX_BEGIN_NAMESPACE(std) 49*404b540aSrobert 50*404b540aSrobert // Generic declaration. 51*404b540aSrobert template<typename _CharT> 52*404b540aSrobert class __basic_file; 53*404b540aSrobert 54*404b540aSrobert // Specialization. 55*404b540aSrobert template<> 56*404b540aSrobert class __basic_file<char> 57*404b540aSrobert { 58*404b540aSrobert // Underlying data source/sink. 59*404b540aSrobert __c_file* _M_cfile; 60*404b540aSrobert 61*404b540aSrobert // True iff we opened _M_cfile, and thus must close it ourselves. 62*404b540aSrobert bool _M_cfile_created; 63*404b540aSrobert 64*404b540aSrobert public: 65*404b540aSrobert __basic_file(__c_lock* __lock = 0); 66*404b540aSrobert 67*404b540aSrobert __basic_file* 68*404b540aSrobert open(const char* __name, ios_base::openmode __mode, int __prot = 0664); 69*404b540aSrobert 70*404b540aSrobert __basic_file* 71*404b540aSrobert sys_open(__c_file* __file, ios_base::openmode); 72*404b540aSrobert 73*404b540aSrobert __basic_file* 74*404b540aSrobert sys_open(int __fd, ios_base::openmode __mode); 75*404b540aSrobert 76*404b540aSrobert __basic_file* 77*404b540aSrobert close(); 78*404b540aSrobert 79*404b540aSrobert bool 80*404b540aSrobert is_open() const; 81*404b540aSrobert 82*404b540aSrobert int 83*404b540aSrobert fd(); 84*404b540aSrobert 85*404b540aSrobert __c_file* 86*404b540aSrobert file(); 87*404b540aSrobert 88*404b540aSrobert ~__basic_file(); 89*404b540aSrobert 90*404b540aSrobert streamsize 91*404b540aSrobert xsputn(const char* __s, streamsize __n); 92*404b540aSrobert 93*404b540aSrobert streamsize 94*404b540aSrobert xsputn_2(const char* __s1, streamsize __n1, 95*404b540aSrobert const char* __s2, streamsize __n2); 96*404b540aSrobert 97*404b540aSrobert streamsize 98*404b540aSrobert xsgetn(char* __s, streamsize __n); 99*404b540aSrobert 100*404b540aSrobert streamoff 101*404b540aSrobert seekoff(streamoff __off, ios_base::seekdir __way); 102*404b540aSrobert 103*404b540aSrobert int 104*404b540aSrobert sync(); 105*404b540aSrobert 106*404b540aSrobert streamsize 107*404b540aSrobert showmanyc(); 108*404b540aSrobert }; 109*404b540aSrobert 110*404b540aSrobert _GLIBCXX_END_NAMESPACE 111*404b540aSrobert 112*404b540aSrobert #endif 113