std::filesystem::create_hard_link
| 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, |
(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.
[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
| (C++17)(C++17) |
erstellt einen symbolischen Link (Funktion) |
| (C++17) |
gibt die Anzahl der Hardlinks zurück, die auf die spezifische Datei verweisen (Funktion) |