fileStat.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration | Website: https://openfoam.org
5  \\ / A nd | Copyright (C) 2011-2019 OpenFOAM Foundation
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
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.
15 
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.
20 
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/>.
23 
24 Class
25  Foam::fileStat
26 
27 Description
28  Wrapper for stat() system call.
29 
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.
34 
35 SourceFiles
36  fileStat.C
37 
38 \*---------------------------------------------------------------------------*/
39 
40 #ifndef fileStat_H
41 #define fileStat_H
42 
43 #include <sys/stat.h>
44 #include <sys/types.h>
45 
46 #include "label.H"
47 #include "fileName.H"
48 
49 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
50 
51 namespace Foam
52 {
53 
54 // Forward declaration of friend functions and operators
55 
56 class fileStat;
57 
58 Istream& operator>>(Istream&, fileStat&);
59 Ostream& operator<<(Ostream&, const fileStat&);
60 
61 
62 /*---------------------------------------------------------------------------*\
63  Class fileStat Declaration
64 \*---------------------------------------------------------------------------*/
65 
66 class fileStat
67 {
68  // Private Data
69 
70  struct stat status_;
71 
72  bool isValid_;
73 
74 
75 public:
76 
77  // Public static data
78 
79  //- Number of file variants
80  static const label nVariants_;
81 
82  //- Extensions of the file variants
83  static const char* variantExts_[];
84 
85 
86  // Constructors
87 
88  //- Empty constructor
89  fileStat();
90 
91  //- Construct from components.
92  // followLink : in case of link get status of pointed-to file
93  // maxTime : time out
94  fileStat
95  (
96  const fileName& fName,
97  const bool checkVariants = true,
98  const bool followLink = true,
99  const unsigned int maxTime = 0
100  );
101 
102  //- Construct from Istream
103  fileStat(Istream&);
104 
105 
106  // Member Functions
107 
108  // Access
109 
110  //- Raw status
111  const struct stat& status() const
112  {
113  return status_;
114  }
115 
116  //- Did constructor fail
117  bool isValid() const
118  {
119  return isValid_;
120  }
121 
122 
123  // Check
124 
125  //- Compare two fileStats for same device
126  bool sameDevice(const fileStat& stat2) const;
127 
128  //- Compare two fileStats for same Inode
129  bool sameINode(const fileStat& stat2) const;
130 
131  //- Compare state against inode
132  bool sameINode(const label iNode) const;
133 
134 
135  // IOstream Operators
136 
137  friend Istream& operator>>(Istream&, fileStat&);
138  friend Ostream& operator<<(Ostream&, const fileStat&);
139 };
140 
141 
142 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
143 
144 } // End namespace Foam
145 
146 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
147 
148 #endif
149 
150 // ************************************************************************* //
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Definition: label.H:59
A class for handling file names.
Definition: fileName.H:79
static const label nVariants_
Number of file variants.
Definition: fileStat.H:79
An Istream is an abstract base class for all input systems (streams, files, token lists etc)...
Definition: Istream.H:57
fileStat()
Empty constructor.
Definition: fileStat.C:43
friend Ostream & operator<<(Ostream &, const fileStat &)
bool sameINode(const fileStat &stat2) const
Compare two fileStats for same Inode.
Definition: fileStat.C:108
const struct stat & status() const
Raw status.
Definition: fileStat.H:110
bool sameDevice(const fileStat &stat2) const
Compare two fileStats for same device.
Definition: fileStat.C:97
Istream & operator>>(Istream &, directionInfo &)
friend Istream & operator>>(Istream &, fileStat &)
An Ostream is an abstract base class for all output systems (streams, files, token lists...
Definition: Ostream.H:53
Wrapper for stat() system call.
Definition: fileStat.H:65
Ostream & operator<<(Ostream &, const ensightPart &)
static const char * variantExts_[]
Extensions of the file variants.
Definition: fileStat.H:82
bool isValid() const
Did constructor fail.
Definition: fileStat.H:116
Namespace for OpenFOAM.