下面是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在MacOSX10.7.4 (Lion)上运行时,它确实可以工作,但由于某种原因,它正在执行fork() --我之所以这么说,是因为它会导致Java图标在任务栏弹出弹出窗口,并在命令栏中显示"HardLink“作为程序名。
我的问题是:为什么JNA要做fork() (或者是)?这个程序有什么问题吗?
注意:我对从Java硬链接文件的其他方法不感兴趣。这只是一个例子。
发布于 2012-07-19 01:53:05
JNA加载一些AWT类,除非您运行的是headless。与AWT相关的类(包括Swing)的加载导致java进程出现在OSX Dock中。
使用-Djava.awt.headless=true运行您的程序。这将阻止它出现在OSX dock中。
https://stackoverflow.com/questions/11545533
复制相似问题