Namensräume
Varianten
Aktionen

std::experimental::filesystem::create_hard_link

Von cppreference.com
< cpp‎ | experimental‎ | fs
 
 
 
 
Definiert im Header <experimental/filesystem>
void create_hard_link( const path& target, const path& link );
void create_hard_link( const path& target, const path& link, error_code& ec );
(Dateisystem-TS)

Erstellt einen Hardlink link, dessen Ziel target ist, als ob 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 unter dem Namen link zugänglich.

Inhalt

[edit] 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

[edit] Rückgabewert

(keine)

[edit] Ausnahmen

Die Überladung, die keinen Parameter vom Typ error_code& verwendet, wirft filesystem_error bei zugrunde liegenden OS-API-Fehlern, konstruiert mit target als erstes Argument, link als zweitem Argument und dem OS-Fehlercode als Fehlercode-Argument. std::bad_alloc kann geworfen werden, wenn die Speicherzuweisung fehlschlägt. Die Überladung, die einen Parameter vom Typ error_code& verwendet, setzt diesen auf den OS-API-Fehlercode, wenn ein OS-API-Aufruf fehlschlägt, und führt ec.clear() aus, wenn keine Fehler auftreten. Diese Überladung hat
noexcept-Spezifikation:  
noexcept
  

[edit] Anmerkungen

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

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

Einige Dateisysteme beschränken 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.

[edit] Beispiel

#include <experimental/filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::experimental::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

[edit] Siehe auch

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