Widziałem niezliczone przykłady i samouczki, które pokazują, jak utworzyć plik i wszystkie z nich "oszukiwać", po prostu ustawiając bity uprawnień pliku. Chciałbym wiedzieć/dowiedzieć się, jak prawidłowo utworzyć plik os.FileMode, aby dostarczyć go podczas tworzenia/aktualizowania pliku.Golang poprawnie stwórz os.FileMode
Surowy przykładem jest to poniżej:
func FileWrite(path string, r io.Reader, uid, gid int, perms string) (int64, error){
w, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0664)
if err != nil {
if path == "" {
w = os.Stdout
} else {
return 0, err
}
}
defer w.Close()
size, err := io.Copy(w, r)
if err != nil {
return 0, err
}
return size, err
}
W funkcji podstawowej powyżej 0664 bitów uprawnień jest ustawiona, a mimo to może mieć sens czasami wolę mieć odpowiedni sposób ustawiania FileMode poprawnie. Jak widać powyżej, typowym przykładem jest to, że identyfikator UID/GID jest znany i już dostarczony jako wartość int, a perms to cyfry ósemkowe, które zostały wcześniej zebrane i wstawione do db jako ciągu.
Dzięki Jim, zawsze pomocna! –
O ile się nie mylę, nie jest to przydatne, jeśli próbujesz mieć jakieś pliki, które można zapisać, a inne nie. Można mieć lub na (na przykład) 0200, aby włączyć zapisywalny użytkownik, ale to ułatwiłoby odczyt kodu, gdyby istniała stała os o kontrolowaniu tego. Tak, oczekuję, że każdy programista warty swojej soli będzie znał pozwolenie na ośmiokrotne unix, ale wciąż jest złe programowanie do używania magicznej wartości, kiedy można użyć opisowej nazwy. O ile mogę powiedzieć, że brakuje standardowych bibliotek, to po prostu oczekuj, że wszyscy będą zapamiętywać stałe uprawnienia do pliku Unix. –