Java でハード リンクを作成するための JNA ライブラリの簡単な使用法を次に示します。
import com.sun.jna.Library;
import com.sun.jna.Native;
import java.io.File;
import java.io.IOException;
public final class HardLink {
private static final LibC LIBC = (LibC)Native.loadLibrary("c", LibC.class);
private HardLink() {
}
public static void link(File src, File dest) throws IOException {
if (LIBC.link(src.toString(), dest.toString()) != 0)
throw new IOException(LIBC.strerror(Native.getLastError()));
}
public static void main(String[] args) throws Exception {
System.out.println("Attempting to hardlink " + args[0] + " -> " + args[1]);
HardLink.link(new File(args[0]), new File(args[1]));
}
private interface LibC extends Library {
int link(String from, String to);
String strerror(int errno);
}
}
このプログラムを JNA 3.4.0 を使用して Mac OS X 10.7.4 (Lion) で実行すると、動作しますが、何らかの理由でfork()
- を実行しています。これは、Java アイコンがポップアップ (が表示されます) がタスク バーに表示され、コマンド バーにプログラム名として「HardLink」が表示されます。
私の質問は次のとおりです。なぜJNAはfork()
(またはそれをしているのですか)?このプログラムに何か問題がありますか?
注: Java からファイルをハード リンクする他の方法には興味がありません。これはほんの一例です。