请教xtang先生!

xtang先生:
我在用QNX。我在本机上通过telnet登录到另一台计算机上并启动该机子上的一个程序,那么该程序的打印信息会在本机的屏幕上显示出来。我现在想截获这些打印信息,请问如何实现?(除了重定向这种方法之外有没有其它更好的办法?请给予指点!谢谢了。)
我目前想到了两个办法:
方法一:截获网络数据包;
方法二:通过套接字绑定到telnet所使用的端口进行接收数据;
首先请问各们这两种方法是否可行,如果可行,哪种方法好一些?

如果哪们有更好的办法,请给予指点。谢谢了。

我被这个问题困惑了N长时间了,请帮忙给予解答。在此深表感谢。

第一个方法不太可行。第二个不知道具体你要怎样实现?

如果两边都是QNX,那用QNET就可以解决。

如果一定要象你所讲的,telnet 的话,“不能重定向”是什么意思。我觉得最简单的是用"script"程序。(http://www.qnx.com/developers/docs/6.3.0SP2/neutrino/utilities/s/script.html) 只是不知道这个算不算“重定向”。

我用的是6.2.0版本的。另外,我看了script这个命令,该命令也是将输出保存到一个文件上的,对吧?
我现在就是不想让这些输出的内容保存到文件上,我想直接将这些输出赋给一个变量。请问怎么才可以让这些输出依次赋给一个变量?

把文件打开,内容读进一个变量不行吗?

你说“变量”,是指C语言的“变量”吗?还是Shell, Perl 这样的script里的“变量”?你肯定telnet是你想要的吗?而不是别的办法,比方 rsh ?

我说的变量是C语言的“变量”。由于远端的程序是循环运行的,我想实时获得这些打印信息,所以将打印信息读进文件,然后将文件里的内容读进一个变量是不是无法实时获得这些打印信息呢?

我现在就是不知道用哪种方法最好。所以请教你呀。

假设你的远程是一个非QNX机器。最“干净”的做法是:

  1. 写一个“代理程序”,在你的远程机器上运行。它通过TCPIP接受你的本地程序的指令,启动所要的程序,把启动的程序的标准输出指向网络连接。这样,你的本地程序就可以直接从socket读到远程的输出结果。

这个方法的好处是所有的程序都是你自己的,不需要借助别的程序。

  1. 如果你不希望写程序,比telnet简单的是直接用rsh.

rsh -l <remote_ip> /bin/ls

可以把在远程执行/bin/ls的结果送回你的屏幕。如果这个命令行成功的话,你就可以在程序里 fp = popen(“rsh -l <remote_ip> /bin/ls”,…);然后 fread(buf, len, fp); 来把结果转到“C”变量中。

这个方法是你要学会怎样在远程设置使它同意你rsh进去。rsh是比较标准的tcpip命令,应该有很多资料可以在网上找到的。