LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1242|回复: 3

如何修改stdin,stdout为某个socket

[复制链接]
发表于 2007-3-23 20:41:35 | 显示全部楼层 |阅读模式
  我遇到这样的需求,一个现有的CLI只提供console的方式,所以直接用read和printf实现输入输出。现在要在这个基础上提供telnet的功能,telnet连接已经建立,现在要从telnet进行输入输出,又不能对原来程序做大的修改。
  想到直接把stdin和stdout修改成telnet连接的socket,然后用开关控制,在console进程里把输入输出打到console,在telnet进程里打输入输出打到socket。这样其他都不用修改,可以直接挂原来的实现代码。
  不知道怎么做修改呢?
发表于 2007-3-23 22:16:42 | 显示全部楼层
/proc/XXXX/fd 目录下可以看到每个进程打开的文件描述符, 包括 socket 描述符. 这算是一点提示吧, 不过也是在下所能提供的全部帮助. 但愿有用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-28 08:53:25 | 显示全部楼层
问题解决!

    先通过创建socket和接受连接,来获得实际使用的文件描述符,如下:
    soc=socket(PF_INET, SOCK_STREAM, 0);
      *accSoc = accept(*soc, (struct sockaddr *)&ClientAddr, &sizeof(ClientAddr));
       当然接受连接之前还要绑定和监听。

     然后用dup2函数修改stdin和stdout,如下:
     dup2(*accSoc, STDOUT_FILENO);
       dup2(*accSoc, STDIN_FILENO);

       之后再用printf和readline处理,都会在telnet界面上进行了。
回复 支持 反对

使用道具 举报

发表于 2007-3-28 11:19:45 | 显示全部楼层
原来以为你是要在 shell 层面上进行重定向.....
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表