我在安装了 cygwin 的 windows vista 上从 java 调用 rsync 时遇到问题。将完全相同的命令粘贴到命令外壳中可以正常工作,这很奇怪。
我的测试 java 调用看起来像这样。
String[] envVars = {"PATH=c:/cygwin/bin;%PATH%"};
File workingDir = new File("c:/cygwin/bin/");
Process p = Runtime.getRuntime().exec("c:/cygwin/bin/rsync.exe -verbose -r -t -v --progress -e ssh /cygdrive/c/Users/dokeeffe/workspace/jrsync/ www.servername.net:/home/dokeeffe/rsync/",envVars,workingDir);
然后我启动 2 个流读取器线程来捕获并记录 Process p 的 inputStream 和 errorStream。
这是输出....
DEBUG: com.mddc.client.rsync.StreamGobbler - opening connection using: ssh www.servername.net rsync --server -vvtre.iLs . /home/dokeeffe/rsync/
DEBUG: com.mddc.client.rsync.StreamGobbler - rsync: pipe: Operation not permitted (1)
DEBUG: com.mddc.client.rsync.StreamGobbler - rsync error: error in IPC code (code 14) at /home/lapo/packaging/rsync-3.0.4-1/src/rsync-3.0.4/pipe.c(57) [sender=3.0.4]
发生错误的 rsync 代码是 pipe.c(57) 就是这样。
if (fd_pair(to_child_pipe) < 0 || fd_pair(from_child_pipe) < 0) {
rsyserr(FERROR, errno, "pipe");
exit_cleanup(RERR_IPC);
}
因此,由于某种原因 fd_pair(to_child_pipe) < 0 或 fd_pair(from_child_pipe) < 0。
如果有人有任何建议,那就太好了,因为我现在被困住了。谢谢,