std::filesystem:: create_symlink, std::filesystem:: create_directory_symlink
|
Definido en el encabezado
<filesystem>
|
||
|
void
create_symlink
(
const
std::
filesystem
::
path
&
target,
const std:: filesystem :: path & link ) ; |
(1) | (desde C++17) |
|
void
create_symlink
(
const
std::
filesystem
::
path
&
target,
const
std::
filesystem
::
path
&
link,
|
(2) | (desde C++17) |
|
void
create_directory_symlink
(
const
std::
filesystem
::
path
&
target,
const std:: filesystem :: path & link ) ; |
(3) | (desde C++17) |
|
void
create_directory_symlink
(
const
std::
filesystem
::
path
&
target,
const
std::
filesystem
::
path
&
link,
|
(4) | (desde C++17) |
Crea un enlace simbólico
link
con su destino establecido en
target
como si fuera mediante la función POSIX
symlink()
: la ruta
target
puede ser inválida o no existir.
Algunos sistemas operativos requieren la creación de enlaces simbólicos para identificar que el enlace es a un directorio. El código portable debe usar (3,4) para crear enlaces simbólicos de directorio en lugar de (1,2) , aunque no hay distinción en sistemas POSIX.
Contenidos |
Parámetros
| target | - | ruta a la que apuntará el enlace simbólico, no tiene que existir |
| link | - | ruta del nuevo enlace simbólico |
| ec | - | parámetro de salida para reportar errores en la sobrecarga que no lanza excepciones |
Valor de retorno
(ninguno)
Excepciones
Cualquier sobrecarga no marcada como
noexcept
puede lanzar
std::bad_alloc
si la asignación de memoria falla.
Notas
Algunos sistemas operativos no admiten enlaces simbólicos en absoluto o solo los admiten para archivos regulares.
Algunos sistemas de archivos no admiten enlaces simbólicos independientemente del sistema operativo, por ejemplo el sistema FAT utilizado en algunas tarjetas de memoria y unidades flash.
Al igual que un enlace físico, un enlace simbólico permite que un archivo tenga múltiples nombres lógicos. La presencia de un enlace físico garantiza la existencia de un archivo, incluso después de que se haya eliminado el nombre original. Un enlace simbólico no ofrece tal garantía; de hecho, el archivo nombrado por el argumento target no necesita existir cuando se crea el enlace. Un enlace simbólico puede cruzar límites de sistemas de archivos.
Ejemplo
#include <cassert> #include <filesystem> #include <iostream> namespace fs = std::filesystem; int main() { fs::create_directories("sandbox/subdir"); fs::create_symlink("target", "sandbox/sym1"); fs::create_directory_symlink("subdir", "sandbox/sym2"); for (auto it = fs::directory_iterator("sandbox"); it != fs::directory_iterator(); ++it) if (is_symlink(it->symlink_status())) std::cout << *it << "->" << read_symlink(*it) << '\n'; assert(std::filesystem::equivalent("sandbox/sym2", "sandbox/subdir")); fs::remove_all("sandbox"); }
Salida posible:
"sandbox/sym1"->"target" "sandbox/sym2"->"subdir"
Véase también
|
(C++17)
(C++17)
|
determina los atributos del archivo
determina los atributos del archivo, verificando el destino del enlace simbólico (función) |
|
(C++17)
|
obtiene el destino de un enlace simbólico
(función) |
|
(C++17)
|
crea un enlace físico
(función) |