2010-07-04 11 views

Odpowiedz

11

Nie można się bawić bezpośrednio umaską, ponieważ Java jest abstrakcją, a umask jest specyficzną implementacją POSIX. Ale masz następujące API:

File f; 
f.setExecutable(true); 
f.setReadable(false); 
f.setWritable(true); 

Dostępnych jest kilka interfejsów API, check the docs.

Jeśli musi mają bezpośredni dostęp do umask, albo zrobić to za pośrednictwem JNI i chmod() syscall lub tarło nowy proces z exec("chmod").

+0

Hm interesujące, dzięki. Sądzę, że mogę użyć JNI do wywołania umask (2), a następnie? – eeee

+0

@ Tak, ale musisz wdrożyć swój moduł JNI na wszystkich platformach, które chcesz obsłużyć, ponieważ jest to zależne od platformy niemalże z definicji. – extraneon

+0

@extraneon tak, oczywiście. Szczerze mówiąc, jestem bardzo zaskoczony, że nikt nie zrobił modułu dla Javy odsłaniającego wszystkie interfejsy posix. To znaczy, nie może być dobrze - prawda? Jak ludzie wykonują czynności systemowe w java bez tego typu rzeczy? – eeee

1

java.nio.file.attribute.PosixFileAttributes w Java SE 7.

+1

Nie znalazłem tam żadnych funkcji do ustawienia umask, tylko uprawnienia do plików. – Nakedible

+0

@Nowedible Tak. –

0

Innym podejściem jest użycie biblioteki Java 3rd firmy, który odsłania wywołań systemowych POSIX; na przykład

Problem z tym podejściem polega na tym, że jest on z natury nieprzenośny (nie będzie działać na platformie niezgodnej z POSIX) i wymaga biblioteki natywnej specyficznej dla platformy ... i wszystkiego, co się z nią wiąże.

Powiązane problemy