1 // Filesystem operational functions -*- C++ -*-
3 // Copyright (C) 2014-2015 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/filesystem
26 * This is a TS C++ Library header.
29 #ifndef _GLIBCXX_EXPERIMENTAL_FS_OPS_H
30 #define _GLIBCXX_EXPERIMENTAL_FS_OPS_H 1
32 #if __cplusplus < 201103L
33 # include <bits/c++0x_warning.h>
38 namespace std
_GLIBCXX_VISIBILITY(default)
40 namespace experimental
46 _GLIBCXX_BEGIN_NAMESPACE_VERSION
53 path
absolute(const path
& __p
, const path
& __base
= current_path());
55 path
canonical(const path
& __p
, const path
& __base
= current_path());
56 path
canonical(const path
& __p
, error_code
& __ec
);
57 path
canonical(const path
& __p
, const path
& __base
, error_code
& __ec
);
60 copy(const path
& __from
, const path
& __to
)
61 { copy(__from
, __to
, copy_options::none
); }
64 copy(const path
& __from
, const path
& __to
, error_code
& __ec
) noexcept
65 { copy(__from
, __to
, copy_options::none
, __ec
); }
67 void copy(const path
& __from
, const path
& __to
, copy_options __options
);
68 void copy(const path
& __from
, const path
& __to
, copy_options __options
,
69 error_code
& __ec
) noexcept
;
72 copy_file(const path
& __from
, const path
& __to
)
73 { return copy_file(__from
, __to
, copy_options::none
); }
76 copy_file(const path
& __from
, const path
& __to
, error_code
& __ec
) noexcept
77 { return copy_file(__from
, __to
, copy_options::none
, __ec
); }
79 bool copy_file(const path
& __from
, const path
& __to
, copy_options __option
);
80 bool copy_file(const path
& __from
, const path
& __to
, copy_options __option
,
81 error_code
& __ec
) noexcept
;
83 void copy_symlink(const path
& __existing_symlink
, const path
& __new_symlink
);
84 void copy_symlink(const path
& __existing_symlink
, const path
& __new_symlink
,
85 error_code
& __ec
) noexcept
;
87 bool create_directories(const path
& __p
);
88 bool create_directories(const path
& __p
, error_code
& __ec
) noexcept
;
90 bool create_directory(const path
& __p
);
91 bool create_directory(const path
& __p
, error_code
& __ec
) noexcept
;
93 bool create_directory(const path
& __p
, const path
& attributes
);
94 bool create_directory(const path
& __p
, const path
& attributes
,
95 error_code
& __ec
) noexcept
;
97 void create_directory_symlink(const path
& __to
, const path
& __new_symlink
);
98 void create_directory_symlink(const path
& __to
, const path
& __new_symlink
,
99 error_code
& __ec
) noexcept
;
101 void create_hard_link(const path
& __to
, const path
& __new_hard_link
);
102 void create_hard_link(const path
& __to
, const path
& __new_hard_link
,
103 error_code
& __ec
) noexcept
;
105 void create_symlink(const path
& __to
, const path
& __new_symlink
);
106 void create_symlink(const path
& __to
, const path
& __new_symlink
,
107 error_code
& __ec
) noexcept
;
110 path
current_path(error_code
& __ec
);
111 void current_path(const path
& __p
);
112 void current_path(const path
& __p
, error_code
& __ec
) noexcept
;
115 exists(file_status __s
) noexcept
116 { return status_known(__s
) && __s
.type() != file_type::not_found
; }
119 exists(const path
& __p
)
120 { return exists(status(__p
)); }
123 exists(const path
& __p
, error_code
& __ec
) noexcept
124 { return exists(status(__p
, __ec
)); }
127 equivalent(const path
& __p1
, const path
& __p2
);
130 equivalent(const path
& __p1
, const path
& __p2
, error_code
& __ec
) noexcept
;
132 uintmax_t file_size(const path
& __p
);
133 uintmax_t file_size(const path
& __p
, error_code
& __ec
) noexcept
;
135 uintmax_t hard_link_count(const path
& __p
);
136 uintmax_t hard_link_count(const path
& __p
, error_code
& __ec
) noexcept
;
139 is_block_file(file_status __s
) noexcept
140 { return __s
.type() == file_type::block
; }
143 is_block_file(const path
& __p
)
144 { return is_block_file(status(__p
)); }
147 is_block_file(const path
& __p
, error_code
& __ec
) noexcept
148 { return is_block_file(status(__p
, __ec
)); }
151 is_character_file(file_status __s
) noexcept
152 { return __s
.type() == file_type::character
; }
155 is_character_file(const path
& __p
)
156 { return is_character_file(status(__p
)); }
159 is_character_file(const path
& __p
, error_code
& __ec
) noexcept
160 { return is_character_file(status(__p
, __ec
)); }
163 is_directory(file_status __s
) noexcept
164 { return __s
.type() == file_type::directory
; }
167 is_directory(const path
& __p
)
168 { return is_directory(status(__p
)); }
171 is_directory(const path
& __p
, error_code
& __ec
) noexcept
172 { return is_directory(status(__p
, __ec
)); }
174 bool is_empty(const path
& __p
);
175 bool is_empty(const path
& __p
, error_code
& __ec
) noexcept
;
178 is_fifo(file_status __s
) noexcept
179 { return __s
.type() == file_type::fifo
; }
182 is_fifo(const path
& __p
)
183 { return is_fifo(status(__p
)); }
186 is_fifo(const path
& __p
, error_code
& __ec
) noexcept
187 { return is_fifo(status(__p
, __ec
)); }
190 is_other(file_status __s
) noexcept
192 return exists(__s
) && !is_regular_file(__s
) && !is_directory(__s
)
197 is_other(const path
& __p
)
198 { return is_other(status(__p
)); }
201 is_other(const path
& __p
, error_code
& __ec
) noexcept
202 { return is_other(status(__p
, __ec
)); }
205 is_regular_file(file_status __s
) noexcept
206 { return __s
.type() == file_type::regular
; }
209 is_regular_file(const path
& __p
)
210 { return is_regular_file(status(__p
)); }
213 is_regular_file(const path
& __p
, error_code
& __ec
) noexcept
214 { return is_regular_file(status(__p
, __ec
)); }
217 is_socket(file_status __s
) noexcept
218 { return __s
.type() == file_type::socket
; }
221 is_socket(const path
& __p
)
222 { return is_socket(status(__p
)); }
225 is_socket(const path
& __p
, error_code
& __ec
) noexcept
226 { return is_socket(status(__p
, __ec
)); }
229 is_symlink(file_status __s
) noexcept
230 { return __s
.type() == file_type::symlink
; }
233 is_symlink(const path
& __p
)
234 { return is_symlink(symlink_status(__p
)); }
237 is_symlink(const path
& __p
, error_code
& __ec
) noexcept
238 { return is_symlink(symlink_status(__p
, __ec
)); }
240 file_time_type
last_write_time(const path
& __p
);
241 file_time_type
last_write_time(const path
& __p
, error_code
& __ec
) noexcept
;
242 void last_write_time(const path
& __p
, file_time_type __new_time
);
243 void last_write_time(const path
& __p
, file_time_type __new_time
,
244 error_code
& __ec
) noexcept
;
246 void permissions(const path
& __p
, perms __prms
);
247 void permissions(const path
& __p
, perms __prms
, error_code
& __ec
) noexcept
;
249 path
read_symlink(const path
& __p
);
250 path
read_symlink(const path
& __p
, error_code
& __ec
);
252 bool remove(const path
& __p
);
253 bool remove(const path
& __p
, error_code
& __ec
) noexcept
;
255 uintmax_t remove_all(const path
& __p
);
256 uintmax_t remove_all(const path
& __p
, error_code
& __ec
) noexcept
;
258 void rename(const path
& __from
, const path
& __to
);
259 void rename(const path
& __from
, const path
& __to
, error_code
& __ec
) noexcept
;
261 void resize_file(const path
& __p
, uintmax_t __size
);
262 void resize_file(const path
& __p
, uintmax_t __size
, error_code
& __ec
) noexcept
;
264 space_info
space(const path
& __p
);
265 space_info
space(const path
& __p
, error_code
& __ec
) noexcept
;
267 file_status
status(const path
& __p
);
268 file_status
status(const path
& __p
, error_code
& __ec
) noexcept
;
270 inline bool status_known(file_status __s
) noexcept
271 { return __s
.type() != file_type::none
; }
273 file_status
symlink_status(const path
& __p
);
274 file_status
symlink_status(const path
& __p
, error_code
& __ec
) noexcept
;
276 path
system_complete(const path
& __p
);
277 path
system_complete(const path
& __p
, error_code
& __ec
);
279 path
temp_directory_path();
280 path
temp_directory_path(error_code
& __ec
);
282 // @} group filesystem
283 _GLIBCXX_END_NAMESPACE_VERSION
285 } // namespace filesystem
286 } // namespace experimental
291 #endif // _GLIBCXX_EXPERIMENTAL_FS_OPS_H