std::experimental::filesystem::create_hard_link
| 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[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) | |
| gibt die Anzahl der Hardlinks zurück, die auf die spezifische Datei verweisen (Funktion) |