Merge branch 'upstream/OpenFOAM' into pu
[freefoam.git] / src / OSspecific / POSIX / fileStat.H
blob240b4ee62710c3ce3b6a378e544cc2d6ed97d2a5
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 1991-2010 OpenCFD Ltd.
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by
13     the Free Software Foundation, either version 3 of the License, or
14     (at your option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     Foam::fileStat
27 Description
28     Wrapper for stat() system call.
30 Warning
31     on Linux (an maybe on others) a stat() of an nfs mounted (remote)
32     file does never timeout and cannot be interrupted!
33     So e.g. Foam::ping first and hope nfs is running.
35 SourceFiles
36     fileStat.C
38 \*---------------------------------------------------------------------------*/
40 #ifndef fileStat_H
41 #define fileStat_H
43 #include <sys/stat.h>
44 #include <sys/types.h>
46 #include <OpenFOAM/label.H>
47 #include <OpenFOAM/fileName.H>
49 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
51 namespace Foam
54 // Forward declaration of friend functions and operators
56 class fileStat;
58 Istream& operator>>(Istream&, fileStat&);
59 Ostream& operator<<(Ostream&, const fileStat&);
62 /*---------------------------------------------------------------------------*\
63                            Class fileStat Declaration
64 \*---------------------------------------------------------------------------*/
66 class fileStat
68     // Private data
70         struct stat status_;
72         bool isValid_;
75 public:
77     // Constructors
79         //- Empty constructor
80         fileStat();
82         //- Construct from components
83         fileStat(const fileName& fName, const unsigned int maxTime=0);
85         //- Construct from Istream
86         fileStat(Istream&);
89     // Member Functions
91         // Access
93             //- Raw status
94             const struct stat& status() const
95             {
96                 return status_;
97             }
99             //- Did constructor fail
100             bool isValid() const
101             {
102                 return isValid_;
103             }
106         // Check
108             //- compare two fileStats for same device
109             bool sameDevice(const fileStat& stat2) const;
111             //- compare two fileStats for same Inode
112             bool sameINode(const fileStat& stat2) const;
114             //- compare state against inode
115             bool sameINode(const label iNode) const;
118     // IOstream Operators
120         friend Istream& operator>>(Istream&, fileStat&);
121         friend Ostream& operator<<(Ostream&, const fileStat&);
125 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
127 } // End namespace Foam
129 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
131 #endif
133 // ************************ vim: set sw=4 sts=4 et: ************************ //