以下是使用JNA库在Java中创建硬链接的简单方法:
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硬链接文件的其他方式不感兴趣。这只是一个例子。
答案 0 :(得分:3)
JNA会加载一些AWT类,除非你正在运行无头。这是加载与AWT相关的类(包括Swing),导致java进程出现在OSX Dock中。
使用-Djava.awt.headless = true运行程序。这样可以防止它出现在OSX底座中。