LinuxSir.cn,穿越时空的Linuxsir!

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

在线程中怎么改变system("cmd")的输出方向

[复制链接]
发表于 2009-6-8 10:15:15 | 显示全部楼层 |阅读模式
最近在学习pthread,想用pthread来实现以前都用fork写的服务器程序,服务器在处理客户端的请求时,通常可以在子进程中用dup2(client_fd, 1);
然后调用system比如:system("ls");就可以把输出直接发送到客户端。
但是在pthread的函数中,输出描述符是各个线程共用的,不知道有没有其他的方法实现这个功能?
谢谢!
发表于 2009-6-8 13:24:43 | 显示全部楼层
Linux 的内核跟 Windows 是不同的。对于 Linux 来说,除非你的两个程序之间必须要使用线程的方式共享数据,否则应当尽可能使用进程而非线程。

我不知道你的system是如何实现的,但如果仅仅是需要同步调用的话,fork一下之后子进程用exec父进程用wait就可以了。这样是使用另外一个进程执行的,不存在同进程的问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-9 09:59:42 | 显示全部楼层
这里system是系统调用,system的输出默认是标准输出,我原先的程序fork后的子进程是调用dup2(client_fd, STDOUT_FILENO),把子进程的标准输出重定向到客户端的socket描述符,因为已经用fork写过的程序,我现在学习pthread,主要是想用pthread实现相同的功能。
现在用pthread代替fork后,dup2()后就会影响到其他线程,要么还是用fork,还有就是把标准输出重定向到一个缓存里,然后分析每条输出信息,在分别输出到不同的客户端,这样就太复杂了。现在不知道用线程而不用fork有没有其他的实现方法?谢谢!
回复 支持 反对

使用道具 举报

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

本版积分规则

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