Ce face os.Link
os.Link face ca fișierul existent oldname să fie accesibil și ca newname, ca ln (fără -s). Ambele nume arată spre aceleași date: o modificare prin unul se vede și prin celălalt.
Datele rămân pe disc cât timp există cel puțin un nume. Legăturile hard funcționează doar pe aceeași partiție și, de obicei, nu pentru directoare. Pentru o scurtătură care poate arăta oriunde, folosește os.Symlink.
Parametri
| Parametru | Descriere |
|---|---|
oldname |
Fișierul existent. |
newname |
Numele nou (nu trebuie să existe). |
Ce returnează
nil la succes sau o eroare *os.LinkError.
Exemple
Exemplul 1: Două nume, aceleași date
package main
import (
"fmt"
"os"
)
func main() {
os.WriteFile("lista.txt", []byte("pâine\n"), 0o644)
if err := os.Link("lista.txt", "cumparaturi.txt"); err != nil {
fmt.Println("eroare:", err)
return
}
f, _ := os.OpenFile("lista.txt", os.O_APPEND|os.O_WRONLY, 0)
f.WriteString("lapte\n")
f.Close()
date, _ := os.ReadFile("cumparaturi.txt")
fmt.Print(string(date))
a, _ := os.Stat("lista.txt")
b, _ := os.Stat("cumparaturi.txt")
fmt.Println("același fișier:", os.SameFile(a, b))
}
Rezultat
pâine
lapte
același fișier: true
Exemplul 2: Ștergerea unui nume
Datele rămân accesibile prin celălalt nume.
package main
import (
"fmt"
"os"
)
func main() {
os.WriteFile("original.txt", []byte("date importante"), 0o644)
os.Link("original.txt", "copie-hard.txt")
os.Remove("original.txt")
date, err := os.ReadFile("copie-hard.txt")
fmt.Println(string(date), err)
}
Rezultat
date importante <nil>
Greșeli frecvente
- Crezi că legătura hard este o copie. Nu este: modificările se văd prin ambele nume.
- Încerci o legătură hard între discuri diferite sau spre un director; primești eroare. Folosește
os.Symlink.
Comenzi înrudite
os.Symlink: Creează o legătură simbolică (scurtătură) spre alt fișier; Readlink citește spre ce arată.os.SameFile: Spune dacă două FileInfo descriu același fișier de pe disc, chiar dacă au căi diferite.os.Rename: Redenumește sau mută un fișier ori un director.