Namespaces
Variants

std::filesystem:: create_hard_link

From cppreference.net
Definiert im Header <filesystem>
void create_hard_link ( const std:: filesystem :: path & target,
const std:: filesystem :: path & link ) ;
(1) (seit C++17)
void create_hard_link ( const std:: filesystem :: path & target,

const std:: filesystem :: path & link,

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

Erstellt einen Hardlink link mit seinem Ziel gesetzt auf target wie durch POSIX link() : der Pfadname target muss existieren.

Nach der Erstellung sind link und target zwei logische Namen, die auf dieselbe Datei verweisen (sie sind equivalent ). Selbst wenn der ursprüngliche Name target gelöscht wird, existiert die Datei weiterhin und ist als link zugänglich.

Inhaltsverzeichnis

Parameter

target - Pfad der Datei oder des Verzeichnisses, zu dem verlinkt werden soll
link - Pfad des neuen Hard Links
ec - Out-Parameter für Fehlerberichterstattung in der nicht-werfenden Überladung

Rückgabewert

(keine)

Ausnahmen

Jede Überladung, die nicht als noexcept gekennzeichnet ist, kann std::bad_alloc auslösen, wenn die Speicherzuweisung fehlschlägt.

1) Wirft std::filesystem::filesystem_error bei zugrundeliegenden OS-API-Fehlern, konstruiert mit target als erstem Pfadargument, link als zweitem Pfadargument und dem OS-Fehlercode als Fehlercode-Argument.
2) Setzt einen std:: error_code & -Parameter auf den OS-API-Fehlercode, falls ein OS-API-Aufruf fehlschlägt, und führt ec. clear ( ) aus, falls keine Fehler auftreten.

Hinweise

Einige Betriebssysteme unterstützen harte Links überhaupt nicht oder nur für reguläre Dateien.

Einige Dateisysteme unterstützen keine Hardlinks, unabhängig vom Betriebssystem: das FAT-Dateisystem, das auf Speicherkarten und Flash-Laufwerken verwendet wird, zum Beispiel.

Einige Dateisysteme begrenzen die Anzahl der Verknüpfungen pro Datei.

Das Hardlinken zu Verzeichnissen ist in der Regel dem Superuser vorbehalten.

Hardlinks können in der Regel keine Dateisystemgrenzen überschreiten.

Der spezielle Pfadname Punkt ( "." ) ist ein Hardlink zu seinem übergeordneten Verzeichnis. Der spezielle Pfadname Punkt-Punkt ".." ist ein Hardlink zu dem Verzeichnis, das das übergeordnete Verzeichnis seines übergeordneten Verzeichnisses ist.

Beispiel

#include <filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::filesystem;
int main()
{
    fs::create_directories("sandbox/subdir");
    std::ofstream("sandbox/a").put('a'); // reguläre Datei erstellen
    fs::create_hard_link("sandbox/a", "sandbox/b");
    fs::remove("sandbox/a");
    // aus der originalen Datei via überlebenden Hard Link lesen
    char c = std::ifstream("sandbox/b").get();
    std::cout << c << '\n';
    fs::remove_all("sandbox");
}

Ausgabe:

a

Siehe auch

erstellt eine symbolische Verknüpfung
(Funktion)
gibt die Anzahl der harten Verknüpfungen zurück, die auf die spezifische Datei verweisen
(Funktion)