我在使用 rexec 时遇到了一个非常奇怪的错误。代码很简单,我只是在循环中调用 rexec:
#include <stdio.h>
#include <errno.h>
#include <netdb.h>
int main() {
char buffData[1024];
int i;
ssize_t j;
char * l_ahost = "cwp01";
struct servent * l_servInfo = getservbyname("exec", "tcp");
for (i = 0; i < 2000; i++) {
int err = rexec(&l_ahost, l_servInfo->s_port, NULL, NULL, "echo -n .", NULL);
if (err <= 0) {
perror("Rexec error");
} else {
if (read(err, buffData, 1024) > 0) printf ("'%c' %d\n", *buffData, i);
close(err);
}
}
return 0;
}
输出是:
muftak : > gcc tst_rexec.c ; ./a.out
'.' 0
'.' 1
'.' 2
'.' 3
'.' 4
...
'.' 47
'.' 48
'.' 49
cwp01.eurocontrol.fr: Connection reset by peer
Rexec error: Illegal seek
'.' 51
'.' 52
'.' 53
'.' 54
...
为什么 rexec 几乎总是正确工作,但并非总是如此?对于这样一个简单的案例,非确定性行为让我很不安。我不知道在哪里搜索对此的解释(当然,stackoverflow 除外)。
我正在使用 Red Hat Enterprise Linux Server 5.8 (Tikanga)
最佳答案
我对 TCP 了解不多,对 rexec 了解更少。你试过命令版本了吗?您的代码建议您可以使用 rexec (1) 而不是 rexec (3)。
祝你好运。
关于linux - 使用 rexec 时的随机错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17151362/