1 // Filesystem operational functions -*- C++ -*-
3 // Copyright (C) 2014-2017 Free Software Foundation, Inc.
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)
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.
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.
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/>.
25 /** @file experimental/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{experimental/filesystem}
30 #ifndef _GLIBCXX_EXPERIMENTAL_FS_OPS_H
31 #define _GLIBCXX_EXPERIMENTAL_FS_OPS_H 1
33 #if __cplusplus < 201103L
34 # include <bits/c++0x_warning.h>
39 namespace std
_GLIBCXX_VISIBILITY(default)
41 _GLIBCXX_BEGIN_NAMESPACE_VERSION
43 namespace experimental
50 * @ingroup filesystem-ts
54 path
absolute(const path
& __p
, const path
& __base
= current_path());
56 path
canonical(const path
& __p
, const path
& __base
= current_path());
57 path
canonical(const path
& __p
, error_code
& __ec
);
58 path
canonical(const path
& __p
, const path
& __base
, error_code
& __ec
);
61 copy(const path
& __from
, const path
& __to
)
62 { copy(__from
, __to
, copy_options::none
); }
65 copy(const path
& __from
, const path
& __to
, error_code
& __ec
) noexcept
66 { copy(__from
, __to
, copy_options::none
, __ec
); }
68 void copy(const path
& __from
, const path
& __to
, copy_options __options
);
69 void copy(const path
& __from
, const path
& __to
, copy_options __options
,
70 error_code
& __ec
) noexcept
;
73 copy_file(const path
& __from
, const path
& __to
)
74 { return copy_file(__from
, __to
, copy_options::none
); }
77 copy_file(const path
& __from
, const path
& __to
, error_code
& __ec
) noexcept
78 { return copy_file(__from
, __to
, copy_options::none
, __ec
); }
80 bool copy_file(const path
& __from
, const path
& __to
, copy_options __option
);
81 bool copy_file(const path
& __from
, const path
& __to
, copy_options __option
,
82 error_code
& __ec
) noexcept
;
84 void copy_symlink(const path
& __existing_symlink
, const path
& __new_symlink
);
85 void copy_symlink(const path
& __existing_symlink
, const path
& __new_symlink
,
86 error_code
& __ec
) noexcept
;
88 bool create_directories(const path
& __p
);
89 bool create_directories(const path
& __p
, error_code
& __ec
) noexcept
;
91 bool create_directory(const path
& __p
);
92 bool create_directory(const path
& __p
, error_code
& __ec
) noexcept
;
94 bool create_directory(const path
& __p
, const path
& attributes
);
95 bool create_directory(const path
& __p
, const path
& attributes
,
96 error_code
& __ec
) noexcept
;
98 void create_directory_symlink(const path
& __to
, const path
& __new_symlink
);
99 void create_directory_symlink(const path
& __to
, const path
& __new_symlink
,
100 error_code
& __ec
) noexcept
;
102 void create_hard_link(const path
& __to
, const path
& __new_hard_link
);
103 void create_hard_link(const path
& __to
, const path
& __new_hard_link
,
104 error_code
& __ec
) noexcept
;
106 void create_symlink(const path
& __to
, const path
& __new_symlink
);
107 void create_symlink(const path
& __to
, const path
& __new_symlink
,
108 error_code
& __ec
) noexcept
;
111 path
current_path(error_code
& __ec
);
112 void current_path(const path
& __p
);
113 void current_path(const path
& __p
, error_code
& __ec
) noexcept
;
116 equivalent(const path
& __p1
, const path
& __p2
);
119 equivalent(const path
& __p1
, const path
& __p2
, error_code
& __ec
) noexcept
;
122 exists(file_status __s
) noexcept
123 { return status_known(__s
) && __s
.type() != file_type::not_found
; }
126 exists(const path
& __p
)
127 { return exists(status(__p
)); }
130 exists(const path
& __p
, error_code
& __ec
) noexcept
132 auto __s
= status(__p
, __ec
);
133 if (status_known(__s
))
138 uintmax_t file_size(const path
& __p
);
139 uintmax_t file_size(const path
& __p
, error_code
& __ec
) noexcept
;
141 uintmax_t hard_link_count(const path
& __p
);
142 uintmax_t hard_link_count(const path
& __p
, error_code
& __ec
) noexcept
;
145 is_block_file(file_status __s
) noexcept
146 { return __s
.type() == file_type::block
; }
149 is_block_file(const path
& __p
)
150 { return is_block_file(status(__p
)); }
153 is_block_file(const path
& __p
, error_code
& __ec
) noexcept
154 { return is_block_file(status(__p
, __ec
)); }
157 is_character_file(file_status __s
) noexcept
158 { return __s
.type() == file_type::character
; }
161 is_character_file(const path
& __p
)
162 { return is_character_file(status(__p
)); }
165 is_character_file(const path
& __p
, error_code
& __ec
) noexcept
166 { return is_character_file(status(__p
, __ec
)); }
169 is_directory(file_status __s
) noexcept
170 { return __s
.type() == file_type::directory
; }
173 is_directory(const path
& __p
)
174 { return is_directory(status(__p
)); }
177 is_directory(const path
& __p
, error_code
& __ec
) noexcept
178 { return is_directory(status(__p
, __ec
)); }
180 bool is_empty(const path
& __p
);
181 bool is_empty(const path
& __p
, error_code
& __ec
) noexcept
;
184 is_fifo(file_status __s
) noexcept
185 { return __s
.type() == file_type::fifo
; }
188 is_fifo(const path
& __p
)
189 { return is_fifo(status(__p
)); }
192 is_fifo(const path
& __p
, error_code
& __ec
) noexcept
193 { return is_fifo(status(__p
, __ec
)); }
196 is_other(file_status __s
) noexcept
198 return exists(__s
) && !is_regular_file(__s
) && !is_directory(__s
)
203 is_other(const path
& __p
)
204 { return is_other(status(__p
)); }
207 is_other(const path
& __p
, error_code
& __ec
) noexcept
208 { return is_other(status(__p
, __ec
)); }
211 is_regular_file(file_status __s
) noexcept
212 { return __s
.type() == file_type::regular
; }
215 is_regular_file(const path
& __p
)
216 { return is_regular_file(status(__p
)); }
219 is_regular_file(const path
& __p
, error_code
& __ec
) noexcept
220 { return is_regular_file(status(__p
, __ec
)); }
223 is_socket(file_status __s
) noexcept
224 { return __s
.type() == file_type::socket
; }
227 is_socket(const path
& __p
)
228 { return is_socket(status(__p
)); }
231 is_socket(const path
& __p
, error_code
& __ec
) noexcept
232 { return is_socket(status(__p
, __ec
)); }
235 is_symlink(file_status __s
) noexcept
236 { return __s
.type() == file_type::symlink
; }
239 is_symlink(const path
& __p
)
240 { return is_symlink(symlink_status(__p
)); }
243 is_symlink(const path
& __p
, error_code
& __ec
) noexcept
244 { return is_symlink(symlink_status(__p
, __ec
)); }
246 file_time_type
last_write_time(const path
& __p
);
247 file_time_type
last_write_time(const path
& __p
, error_code
& __ec
) noexcept
;
248 void last_write_time(const path
& __p
, file_time_type __new_time
);
249 void last_write_time(const path
& __p
, file_time_type __new_time
,
250 error_code
& __ec
) noexcept
;
252 void permissions(const path
& __p
, perms __prms
);
253 void permissions(const path
& __p
, perms __prms
, error_code
& __ec
) noexcept
;
255 path
read_symlink(const path
& __p
);
256 path
read_symlink(const path
& __p
, error_code
& __ec
);
258 bool remove(const path
& __p
);
259 bool remove(const path
& __p
, error_code
& __ec
) noexcept
;
261 uintmax_t remove_all(const path
& __p
);
262 uintmax_t remove_all(const path
& __p
, error_code
& __ec
) noexcept
;
264 void rename(const path
& __from
, const path
& __to
);
265 void rename(const path
& __from
, const path
& __to
, error_code
& __ec
) noexcept
;
267 void resize_file(const path
& __p
, uintmax_t __size
);
268 void resize_file(const path
& __p
, uintmax_t __size
, error_code
& __ec
) noexcept
;
270 space_info
space(const path
& __p
);
271 space_info
space(const path
& __p
, error_code
& __ec
) noexcept
;
273 file_status
status(const path
& __p
);
274 file_status
status(const path
& __p
, error_code
& __ec
) noexcept
;
276 inline bool status_known(file_status __s
) noexcept
277 { return __s
.type() != file_type::none
; }
279 file_status
symlink_status(const path
& __p
);
280 file_status
symlink_status(const path
& __p
, error_code
& __ec
) noexcept
;
282 path
system_complete(const path
& __p
);
283 path
system_complete(const path
& __p
, error_code
& __ec
);
285 path
temp_directory_path();
286 path
temp_directory_path(error_code
& __ec
);
288 // @} group filesystem-ts
290 } // namespace filesystem
291 } // namespace experimental
293 _GLIBCXX_END_NAMESPACE_VERSION
298 #endif // _GLIBCXX_EXPERIMENTAL_FS_OPS_H