【发布时间】:2010-10-15 18:16:23
【问题描述】:
我在安装了 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)
如果有人有任何建议,那就太好了,因为我现在被困住了。 谢谢,
【问题讨论】: