Namensräume
Varianten
Aktionen

std::filesystem::create_hard_link

Von cppreference.com
 
 
 
Definiert in 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 dem Ziel 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 äquivalent). Selbst wenn der ursprüngliche Name target gelöscht wird, existiert die Datei weiter und ist als link zugänglich.

Inhalt

[bearbeiten] Parameter

target - Pfad der Datei oder des Verzeichnisses, auf das verlinkt werden soll
link - Pfad des neuen Hardlinks
ec - Ausgabeparameter für die Fehlerberichterstattung in der nicht auslösenden Überladung

[bearbeiten] Rückgabewert

(keine)

[bearbeiten] Ausnahmen

Jede Überladung, die nicht als noexcept markiert 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 Fehlercodeargument.
2) Setzt einen std::error_code& Parameter auf den Betriebssystem-API-Fehlercode, wenn ein Betriebssystem-API-Aufruf fehlschlägt, und führt ec.clear() aus, wenn keine Fehler auftreten.

[bearbeiten] Hinweise

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

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

Einige Dateisysteme begrenzen die Anzahl der Links pro Datei.

Hardlinking zu Verzeichnissen ist typischerweise auf den Superuser beschränkt.

Hardlinks können typischerweise 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.

[bearbeiten] Beispiel

#include <filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::filesystem;
 
int main()
{
    fs::create_directories("sandbox/subdir");
    std::ofstream("sandbox/a").put('a'); // create regular file
    fs::create_hard_link("sandbox/a", "sandbox/b");
    fs::remove("sandbox/a");
    // read from the original file via surviving hard link
    char c = std::ifstream("sandbox/b").get();
    std::cout << c << '\n';
    fs::remove_all("sandbox");
}

Ausgabe

a

[bearbeiten] Siehe auch

erstellt einen symbolischen Link
(Funktion) [bearbeiten]
gibt die Anzahl der Hardlinks zurück, die auf die spezifische Datei verweisen
(Funktion) [bearbeiten]