Esiste una libreria Java di funzioni Unix?

Sto cercando una libreria Java per interfacciare le funzioni standard di Unix, ad esempio stat() , getpwuid() , readlink() .

Questo esisteva e si chiamava javaunix . È stato rilasciato nel 2000. Vedi questo annuncio . Ma la pagina del progetto ora è andata.

C’è una sostituzione moderna per questi tipi di funzioni in Java oggi? Si potrebbe fare una chiamata di sistema a /bin/ls -l e analizzare l’output, o scrivere un metodo JNI personalizzato, ma questi approcci sono più utili del semplice uso della vecchia libreria javaunix .

Chiarimento: per trovare il proprietario di un file, da un programma C, dovrebbe chiamare stat() che fornisce l’UID del proprietario e quindi utilizzare getpwuid() per ottenere il nome dell’account getpwuid() . In Java ciò può essere fatto tramite un metodo JNI personalizzato o la libreria javaunix che utilizza JNI.

Sono a conoscenza di due progetti interessanti:

  • posix per Java (basato su JNI) [derivato da Jython]
  • jna-posix (basato su JNA) [derivato da JRuby]

Personalmente mi piace molto JNA . Dai un’occhiata a questo esempio di mio, mappando il link(2) :

 import com.sun.jna.Library; import com.sun.jna.Native; class Link { private static final C c = (C) Native.loadLibrary("c", C.class); private static interface C extends Library { /** see man 2 link */ public int link(String oldpath, String newpath); } @Override protected void hardLink(String from, String to) { c.link(to, from); } } 

Attualmente JNA-POSIX è stagnante, per quanto ne so.

Gli sviluppatori hanno continuato a creare JNR-POSIX

Sarei sorpreso di vederne uno, considerando che sarebbe quasi necessariamente specifico per la piattaforma. Java non è lo strumento migliore per quel lavoro. Ma potresti sicuramente collegarti tramite JNI o ​​chiamare programmi esterni se insisti. O forse guardare in Groovy, che capisco è abbastanza buono per lo scripting di shell, anche se non ho esperienza personale con esso.

Non conosco nessuna libreria con le funzioni di Unix.

per la maggior parte delle funzioni, credo, è ansible utilizzare l’API Java standard per fare ciò che si desidera. per esempio, non è necessario usare il comando ls per leggere i file di qualche directory. ma in alcuni casi specifici, come stat (per scoprire se un file è un collegamento) devi usare JNI.