2009-04-23 18 views
9

Actualmente uso el comando 'ln' a través de Runtime.exec(). Funciona bien. El único problema es que para hacer este fork, necesitamos el doble del espacio de montón de la aplicación. Mi aplicación es una aplicación de 64 bits con un tamaño de almacenamiento alrededor de 10Gigs y, por lo tanto, se queda sin espacio de intercambio. No pude encontrar ninguna configuración que pudiera solucionar esto.Creando un enlace duro en java

También quiero no usar JNI para lo mismo. También escuché en alguna parte que esta instalación se proporcionará pronto en Java 7.

+0

frenar un poco. ¿Qué estás tratando de hacer, qué has intentado ya y qué pasó cuando lo intentaste? –

Respuesta

6

puede probar JNA en lugar de JNI (JNA tiene algunas ventajas claras sobre JNI); sí, verifique el JSR 203

0

Puede usar Windows en lugar de UNIX? ;) Creo que JDK7 utilizará una llamada similar a CreateProcess en lugar de fork donde esté disponible.

Una solución más práctica sería crear un nuevo proceso secundario poco después de comenzar. Si está utilizando un montón de 10 g, otro pequeño proceso de Java probablemente no sea tan malo. Obtenga ese proceso (mediante el uso de transmisiones) para ejecutar.

4

Esto es muy fácil con JNA:

public interface CLibrary extends Library { 
    CLibrary INSTANCE = (CLibrary) 
     Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"), 
          CLibrary.class); 
    int link(String fromFile, String toFile); 
} 

public static void main(String[] args) { 
    CLibrary.INSTANCE.link(args[0], args[1]); 
} 

compilar y ejecutar!

+0

Se compila, pero no se ejecuta. No bajo Windows, eso es. Todavía no he comentado la magia que realiza JNA, pero parece que el nombre de la función respectiva en MSVCRT es muy diferente. –

+0

Según http://stackoverflow.com/questions/6015006/whats-the-name-of-the-create-hard-link-function-in-msvcrt, la función se llama 'CreateHardLink' y está ubicada en Kernel32, no en MSVCRT (lo cual tiene sentido). –

8

Es fácil en Java 7 usando createLink:

Files.createLink(Paths.get("newlink"), Paths.get("existing")); 
+2

Aquí está la documentación: http://docs.oracle.com/javase/tutorial/essential/io/links.html –