Namespaces
Variants

std::filesystem:: create_hard_link

From cppreference.net
Definido en el encabezado <filesystem>
void create_hard_link ( const std:: filesystem :: path & target,
const std:: filesystem :: path & link ) ;
(1) (desde C++17)
void create_hard_link ( const std:: filesystem :: path & target,

const std:: filesystem :: path & link,

std:: error_code & ec ) noexcept ;
(2) (desde C++17)

Crea un enlace físico link con su destino establecido en target como si fuera mediante POSIX link() : la ruta target debe existir.

Una vez creados, link y target son dos nombres lógicos que se refieren al mismo archivo (son equivalent ). Incluso si el nombre original target es eliminado, el archivo continúa existiendo y es accesible como link .

Contenidos

Parámetros

target - ruta del archivo o directorio al que enlazar
link - ruta del nuevo enlace físico
ec - parámetro de salida para reporte de errores en la sobrecarga no lanzadora

Valor de retorno

(ninguno)

Excepciones

Cualquier sobrecarga no marcada como noexcept puede lanzar std::bad_alloc si la asignación de memoria falla.

1) Lanza std::filesystem::filesystem_error en errores de API del sistema operativo subyacente, construido con target como primer argumento de ruta, link como segundo argumento de ruta, y el código de error del sistema operativo como argumento de código de error.
2) Establece un parámetro std:: error_code & al código de error de la API del sistema operativo si una llamada a la API del SO falla, y ejecuta ec. clear ( ) si no ocurren errores.

Notas

Algunos sistemas operativos no admiten enlaces físicos en absoluto o solo los admiten para archivos regulares.

Algunos sistemas de archivos no admiten enlaces físicos independientemente del sistema operativo: el sistema de archivos FAT utilizado en tarjetas de memoria y unidades flash, por ejemplo.

Algunos sistemas de archivos limitan el número de enlaces por archivo.

El enlace físico a directorios normalmente está restringido al superusuario.

Los enlaces duros normalmente no pueden cruzar los límites del sistema de archivos.

El nombre de ruta especial punto ( "." ) es un enlace físico a su directorio padre. El nombre de ruta especial punto-punto ".." es un enlace físico al directorio que es el padre de su padre.

Ejemplo

#include <filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::filesystem;
int main()
{
    fs::create_directories("sandbox/subdir");
    std::ofstream("sandbox/a").put('a'); // crear archivo regular
    fs::create_hard_link("sandbox/a", "sandbox/b");
    fs::remove("sandbox/a");
    // leer del archivo original mediante el enlace físico sobreviviente
    char c = std::ifstream("sandbox/b").get();
    std::cout << c << '\n';
    fs::remove_all("sandbox");
}

Salida:

a

Véase también

crea un enlace simbólico
(función)
devuelve el número de enlaces físicos que referencian al archivo específico
(función)