当前位置: 技术问答>linux和unix
unix下用C如何调用111端口,或者说 如何让服务器自动启动一个程序?
来源: 互联网 发布时间:2016-06-04
本文导语: 假设在unix下某目录有一个用C编译好的执行文件abc,运行时带一个年月参数,如abc 200905 ,abc程序运行时会在屏幕显示一些信息。 现在想实现这么个功能:局域网中任一台机器(xp系统), 运行一个VC或BC开发的程...
假设在unix下某目录有一个用C编译好的执行文件abc,运行时带一个年月参数,如abc 200905 ,abc程序运行时会在屏幕显示一些信息。
现在想实现这么个功能:局域网中任一台机器(xp系统), 运行一个VC或BC开发的程序,该程序向服务器(UNIX系统)发出请求,服务器收到请求后可以自动启动程序 abc,并且吧abc在屏幕上显示的内容传送到xp系统的机器上来显示。
我注意到unix下有一个111端口,作用是 111 TCP/UDP sunrpc Sun Remote Procedure Call Sun远程过程调用
请问各位大侠:
1。是否可以在写客户端程序时直接调用111端口,把abc 200905当成参数传给111端口,这样就可以直接启动abc 程序,而不需要再编写服务器端的程序呢?
2。如何判断abc程序已经执行完毕?
3。如何截取abc程序运行后在屏幕显示的信息?
现在想实现这么个功能:局域网中任一台机器(xp系统), 运行一个VC或BC开发的程序,该程序向服务器(UNIX系统)发出请求,服务器收到请求后可以自动启动程序 abc,并且吧abc在屏幕上显示的内容传送到xp系统的机器上来显示。
我注意到unix下有一个111端口,作用是 111 TCP/UDP sunrpc Sun Remote Procedure Call Sun远程过程调用
请问各位大侠:
1。是否可以在写客户端程序时直接调用111端口,把abc 200905当成参数传给111端口,这样就可以直接启动abc 程序,而不需要再编写服务器端的程序呢?
2。如何判断abc程序已经执行完毕?
3。如何截取abc程序运行后在屏幕显示的信息?
|
像你这样的要求根本没必要用什么远程过程调用来实现,远程过程调用是用来调用动态库的。
建立一个简单的服务器程序以后,可以把客户程序传过来的字串识别为命令
并在执行之前把标准输出 1 dup到tcp套接字上。
close(1);
dup(socket);
这样程序的执行结果就直接通过套接字传送给客户程序了,程序执行完成以后,服务端会自动关掉连接。
建立一个简单的服务器程序以后,可以把客户程序传过来的字串识别为命令
并在执行之前把标准输出 1 dup到tcp套接字上。
close(1);
dup(socket);
这样程序的执行结果就直接通过套接字传送给客户程序了,程序执行完成以后,服务端会自动关掉连接。
|
LZ的这种需求似乎很普通,就像4楼说的,另外写一个监听端口(111)的程序(111端口是否小了点?用户可支配的端口应该是大于1024的吧?)。
当监控程序监听到111端口的交易请求(请求数据包括年月YYYYMM)时,然后调用abc,将日期作为参数。并且根据abc的返回值来判断abc执行是否成功。最后监听程序将abc的返回值通过socket返回给客户端
这个方法能够实现LZ的1、2两点。而第3点似乎不容易实现,因为abc中显示的内容,监听程序不容易捕捉到。
如果需要实现第3点,我的方法是更改一下程序abc,使监听程序与abc之间采用消息队列通讯(或者其他的进程间通信方式)。这样将abc在执行过程中的显示的内容,通过消息队列传递给监听程序,监听程序通过socket返回给客户端。剩下的部分就是客户端去处理如何显示信息了。
希望能对你有帮助
当监控程序监听到111端口的交易请求(请求数据包括年月YYYYMM)时,然后调用abc,将日期作为参数。并且根据abc的返回值来判断abc执行是否成功。最后监听程序将abc的返回值通过socket返回给客户端
这个方法能够实现LZ的1、2两点。而第3点似乎不容易实现,因为abc中显示的内容,监听程序不容易捕捉到。
如果需要实现第3点,我的方法是更改一下程序abc,使监听程序与abc之间采用消息队列通讯(或者其他的进程间通信方式)。这样将abc在执行过程中的显示的内容,通过消息队列传递给监听程序,监听程序通过socket返回给客户端。剩下的部分就是客户端去处理如何显示信息了。
希望能对你有帮助
|
现在想实现这么个功能:局域网中任一台机器(xp系统), 运行一个VC或BC开发的程序,该程序向服务器(UNIX系统)发出请求,服务器收到请求后可以自动启动程序 abc,并且吧abc在屏幕上显示的内容传送到xp系统的机器上来显示。
写个socket监听,接收到请求就启动程序,用system就可以,然后把内容重定向到文件里,从文件里读出数据,再通过socket发给xp机器.
写个socket监听,接收到请求就启动程序,用system就可以,然后把内容重定向到文件里,从文件里读出数据,再通过socket发给xp机器.