libstdc++
bits/fs_ops.h
1 // Filesystem operational functions -*- C++ -*-
2 
3 // Copyright (C) 2014-2018 Free Software Foundation, Inc.
4 //
5 // This file is part of the GNU ISO C++ Library. This library is free
6 // software; you can redistribute it and/or modify it under the
7 // terms of the GNU General Public License as published by the
8 // Free Software Foundation; either version 3, or (at your __option)
9 // any later version.
10 
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
15 
16 // Under Section 7 of GPL version 3, you are granted additional
17 // permissions described in the GCC Runtime Library Exception, version
18 // 3.1, as published by the Free Software Foundation.
19 
20 // You should have received a copy of the GNU General Public License and
21 // a copy of the GCC Runtime Library Exception along with this program;
22 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
23 // <http://www.gnu.org/licenses/>.
24 
25 /** @file include/bits/fs_fwd.h
26  * This is an internal header file, included by other library headers.
27  * Do not attempt to use it directly. @headername{filesystem}
28  */
29 
30 #ifndef _GLIBCXX_FS_OPS_H
31 #define _GLIBCXX_FS_OPS_H 1
32 
33 #if __cplusplus >= 201703L
34 
35 #include <cstdint>
36 
37 namespace std _GLIBCXX_VISIBILITY(default)
38 {
39 _GLIBCXX_BEGIN_NAMESPACE_VERSION
40 
41 namespace filesystem
42 {
43  /**
44  * @ingroup filesystem
45  * @{
46  */
47 
48  path absolute(const path& __p);
49  path absolute(const path& __p, error_code& __ec);
50 
51  path canonical(const path& __p);
52  path canonical(const path& __p, error_code& __ec);
53 
54  inline void
55  copy(const path& __from, const path& __to)
56  { copy(__from, __to, copy_options::none); }
57 
58  inline void
59  copy(const path& __from, const path& __to, error_code& __ec)
60  { copy(__from, __to, copy_options::none, __ec); }
61 
62  void copy(const path& __from, const path& __to, copy_options __options);
63  void copy(const path& __from, const path& __to, copy_options __options,
64  error_code& __ec);
65 
66  inline bool
67  copy_file(const path& __from, const path& __to)
68  { return copy_file(__from, __to, copy_options::none); }
69 
70  inline bool
71  copy_file(const path& __from, const path& __to, error_code& __ec)
72  { return copy_file(__from, __to, copy_options::none, __ec); }
73 
74  bool copy_file(const path& __from, const path& __to, copy_options __option);
75  bool copy_file(const path& __from, const path& __to, copy_options __option,
76  error_code& __ec);
77 
78  void copy_symlink(const path& __existing_symlink, const path& __new_symlink);
79  void copy_symlink(const path& __existing_symlink, const path& __new_symlink,
80  error_code& __ec) noexcept;
81 
82  bool create_directories(const path& __p);
83  bool create_directories(const path& __p, error_code& __ec);
84 
85  bool create_directory(const path& __p);
86  bool create_directory(const path& __p, error_code& __ec) noexcept;
87 
88  bool create_directory(const path& __p, const path& attributes);
89  bool create_directory(const path& __p, const path& attributes,
90  error_code& __ec) noexcept;
91 
92  void create_directory_symlink(const path& __to, const path& __new_symlink);
93  void create_directory_symlink(const path& __to, const path& __new_symlink,
94  error_code& __ec) noexcept;
95 
96  void create_hard_link(const path& __to, const path& __new_hard_link);
97  void create_hard_link(const path& __to, const path& __new_hard_link,
98  error_code& __ec) noexcept;
99 
100  void create_symlink(const path& __to, const path& __new_symlink);
101  void create_symlink(const path& __to, const path& __new_symlink,
102  error_code& __ec) noexcept;
103 
104  path current_path();
105  path current_path(error_code& __ec);
106  void current_path(const path& __p);
107  void current_path(const path& __p, error_code& __ec) noexcept;
108 
109  bool
110  equivalent(const path& __p1, const path& __p2);
111 
112  bool
113  equivalent(const path& __p1, const path& __p2, error_code& __ec) noexcept;
114 
115  inline bool
116  exists(file_status __s) noexcept
117  { return status_known(__s) && __s.type() != file_type::not_found; }
118 
119  inline bool
120  exists(const path& __p)
121  { return exists(status(__p)); }
122 
123  inline bool
124  exists(const path& __p, error_code& __ec) noexcept
125  {
126  auto __s = status(__p, __ec);
127  if (status_known(__s))
128  {
129  __ec.clear();
130  return __s.type() != file_type::not_found;
131  }
132  return false;
133  }
134 
135  uintmax_t file_size(const path& __p);
136  uintmax_t file_size(const path& __p, error_code& __ec) noexcept;
137 
138  uintmax_t hard_link_count(const path& __p);
139  uintmax_t hard_link_count(const path& __p, error_code& __ec) noexcept;
140 
141  inline bool
142  is_block_file(file_status __s) noexcept
143  { return __s.type() == file_type::block; }
144 
145  inline bool
146  is_block_file(const path& __p)
147  { return is_block_file(status(__p)); }
148 
149  inline bool
150  is_block_file(const path& __p, error_code& __ec) noexcept
151  { return is_block_file(status(__p, __ec)); }
152 
153  inline bool
154  is_character_file(file_status __s) noexcept
155  { return __s.type() == file_type::character; }
156 
157  inline bool
158  is_character_file(const path& __p)
159  { return is_character_file(status(__p)); }
160 
161  inline bool
162  is_character_file(const path& __p, error_code& __ec) noexcept
163  { return is_character_file(status(__p, __ec)); }
164 
165  inline bool
166  is_directory(file_status __s) noexcept
167  { return __s.type() == file_type::directory; }
168 
169  inline bool
170  is_directory(const path& __p)
171  { return is_directory(status(__p)); }
172 
173  inline bool
174  is_directory(const path& __p, error_code& __ec) noexcept
175  { return is_directory(status(__p, __ec)); }
176 
177  bool is_empty(const path& __p);
178  bool is_empty(const path& __p, error_code& __ec);
179 
180  inline bool
181  is_fifo(file_status __s) noexcept
182  { return __s.type() == file_type::fifo; }
183 
184  inline bool
185  is_fifo(const path& __p)
186  { return is_fifo(status(__p)); }
187 
188  inline bool
189  is_fifo(const path& __p, error_code& __ec) noexcept
190  { return is_fifo(status(__p, __ec)); }
191 
192  inline bool
193  is_other(file_status __s) noexcept
194  {
195  return exists(__s) && !is_regular_file(__s) && !is_directory(__s)
196  && !is_symlink(__s);
197  }
198 
199  inline bool
200  is_other(const path& __p)
201  { return is_other(status(__p)); }
202 
203  inline bool
204  is_other(const path& __p, error_code& __ec) noexcept
205  { return is_other(status(__p, __ec)); }
206 
207  inline bool
208  is_regular_file(file_status __s) noexcept
209  { return __s.type() == file_type::regular; }
210 
211  inline bool
212  is_regular_file(const path& __p)
213  { return is_regular_file(status(__p)); }
214 
215  inline bool
216  is_regular_file(const path& __p, error_code& __ec) noexcept
217  { return is_regular_file(status(__p, __ec)); }
218 
219  inline bool
220  is_socket(file_status __s) noexcept
221  { return __s.type() == file_type::socket; }
222 
223  inline bool
224  is_socket(const path& __p)
225  { return is_socket(status(__p)); }
226 
227  inline bool
228  is_socket(const path& __p, error_code& __ec) noexcept
229  { return is_socket(status(__p, __ec)); }
230 
231  inline bool
232  is_symlink(file_status __s) noexcept
233  { return __s.type() == file_type::symlink; }
234 
235  inline bool
236  is_symlink(const path& __p)
237  { return is_symlink(symlink_status(__p)); }
238 
239  inline bool
240  is_symlink(const path& __p, error_code& __ec) noexcept
241  { return is_symlink(symlink_status(__p, __ec)); }
242 
243  file_time_type last_write_time(const path& __p);
244  file_time_type last_write_time(const path& __p, error_code& __ec) noexcept;
245  void last_write_time(const path& __p, file_time_type __new_time);
246  void last_write_time(const path& __p, file_time_type __new_time,
247  error_code& __ec) noexcept;
248 
249  void
250  permissions(const path& __p, perms __prms,
251  perm_options __opts = perm_options::replace);
252 
253  inline void
254  permissions(const path& __p, perms __prms, error_code& __ec) noexcept
255  { permissions(__p, __prms, perm_options::replace, __ec); }
256 
257  void
258  permissions(const path& __p, perms __prms, perm_options __opts,
259  error_code& __ec) noexcept;
260 
261  inline path proximate(const path& __p, error_code& __ec)
262  { return proximate(__p, current_path(), __ec); }
263 
264  path proximate(const path& __p, const path& __base = current_path());
265  path proximate(const path& __p, const path& __base, error_code& __ec);
266 
267  path read_symlink(const path& __p);
268  path read_symlink(const path& __p, error_code& __ec);
269 
270  inline path relative(const path& __p, error_code& __ec)
271  { return relative(__p, current_path(), __ec); }
272 
273  path relative(const path& __p, const path& __base = current_path());
274  path relative(const path& __p, const path& __base, error_code& __ec);
275 
276  bool remove(const path& __p);
277  bool remove(const path& __p, error_code& __ec) noexcept;
278 
279  uintmax_t remove_all(const path& __p);
280  uintmax_t remove_all(const path& __p, error_code& __ec);
281 
282  void rename(const path& __from, const path& __to);
283  void rename(const path& __from, const path& __to, error_code& __ec) noexcept;
284 
285  void resize_file(const path& __p, uintmax_t __size);
286  void resize_file(const path& __p, uintmax_t __size, error_code& __ec) noexcept;
287 
288  space_info space(const path& __p);
289  space_info space(const path& __p, error_code& __ec) noexcept;
290 
291  file_status status(const path& __p);
292  file_status status(const path& __p, error_code& __ec) noexcept;
293 
294  inline bool status_known(file_status __s) noexcept
295  { return __s.type() != file_type::none; }
296 
297  file_status symlink_status(const path& __p);
298  file_status symlink_status(const path& __p, error_code& __ec) noexcept;
299 
300  path temp_directory_path();
301  path temp_directory_path(error_code& __ec);
302 
303  path weakly_canonical(const path& __p);
304  path weakly_canonical(const path& __p, error_code& __ec);
305 
306  // @} group filesystem
307 } // namespace filesystem
308 
309 _GLIBCXX_END_NAMESPACE_VERSION
310 } // namespace std
311 
312 #endif // C++17
313 
314 #endif // _GLIBCXX_FS_OPS_H
ISO C++ entities toplevel namespace is std.