Namespaces
Variants

std::filesystem:: create_hard_link

From cppreference.net
Défini dans l'en-tête <filesystem>
void create_hard_link ( const std:: filesystem :: path & target,
const std:: filesystem :: path & link ) ;
(1) (depuis C++17)
void create_hard_link ( const std:: filesystem :: path & target,

const std:: filesystem :: path & link,

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

Crée un lien physique link dont la cible est définie sur target comme par la fonction POSIX link() : le chemin target doit exister.

Une fois créés, link et target sont deux noms logiques qui font référence au même fichier (ils sont équivalents ). Même si le nom original target est supprimé, le fichier continue d'exister et reste accessible sous le nom link .

Table des matières

Paramètres

target - chemin du fichier ou répertoire à lier
link - chemin du nouveau lien physique
ec - paramètre de sortie pour le rapport d'erreurs dans la surcharge non-lançante

Valeur de retour

(aucun)

Exceptions

Toute surcharge non marquée noexcept peut lever std::bad_alloc si l'allocation de mémoire échoue.

1) Lance std::filesystem::filesystem_error en cas d'erreurs de l'API système sous-jacente, construit avec target comme premier argument de chemin, link comme deuxième argument de chemin, et le code d'erreur du système comme argument de code d'erreur.
2) Définit un paramètre std:: error_code & au code d'erreur de l'API du système d'exploitation si un appel d'API système échoue, et exécute ec. clear ( ) si aucune erreur ne survient.

Notes

Certains systèmes d'exploitation ne prennent pas en charge les liens physiques du tout ou ne les prennent en charge que pour les fichiers réguliers.

Certains systèmes de fichiers ne prennent pas en charge les liens physiques, quel que soit le système d'exploitation : le système de fichiers FAT utilisé sur les cartes mémoire et les clés USB, par exemple.

Certains systèmes de fichiers limitent le nombre de liens par fichier.

La création de liens physiques vers des répertoires est généralement restreinte au superutilisateur.

Les liens physiques ne peuvent généralement pas franchir les limites des systèmes de fichiers.

Le nom de chemin spécial point ( "." ) est un lien physique vers son répertoire parent. Le nom de chemin spécial point-point ".." est un lien physique vers le répertoire qui est le parent de son parent.

Exemple

#include <filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::filesystem;
int main()
{
    fs::create_directories("sandbox/subdir");
    std::ofstream("sandbox/a").put('a'); // créer un fichier régulier
    fs::create_hard_link("sandbox/a", "sandbox/b");
    fs::remove("sandbox/a");
    // lire depuis le fichier original via le lien physique survivant
    char c = std::ifstream("sandbox/b").get();
    std::cout << c << '\n';
    fs::remove_all("sandbox");
}

Sortie :

a

Voir aussi

crée un lien symbolique
(fonction)
retourne le nombre de liens physiques référençant le fichier spécifique
(fonction)