关于获得stdin和stdout

pf_ma 2002-07-19 04:54:09
请教:


1.在程序中如何获得一个进程的stdin和stdout(已知进程ID)?
2.如何在当前进程中创建一个子进程并获得子进程的stdin和stdout,或
把子进程的stdin和stdout联接到当前进程的某管道...等
...全文
304 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
pf_ma 2002-07-30
  • 打赏
  • 举报
回复
我明白了,谢谢大家。
wake2000 2002-07-29
  • 打赏
  • 举报
回复
听楼主提了很多次的load,不知道是如何一种load法?

如果对方的程序可以由你启动的话,不妨在fork并且执行了dup2之后,再execlp那个程序,那么子进程的stdin和stdout不就成了那个进程的stdin和stdout了?

pf_ma 2002-07-29
  • 打赏
  • 举报
回复
up
pf_ma 2002-07-26
  • 打赏
  • 举报
回复
我想在我的程序中调用别人的程序
wake2000 2002-07-25
  • 打赏
  • 举报
回复
这种设计思路是太牵强了。

进程间通讯有消息队列、共享内存、socket那么多种内容,而你却非得要stdin和stdout?

pf_ma 2002-07-25
  • 打赏
  • 举报
回复
up
pf_ma 2002-07-24
  • 打赏
  • 举报
回复
我的意思是在我的程序中load一个其他的程序,
并向其输入数据并接受输出
linuxnewer 2002-07-24
  • 打赏
  • 举报
回复
gz
pf_ma 2002-07-24
  • 打赏
  • 举报
回复
to young_wind(没有你我怎么办):
你的程序是创建了一个当前进程的副本进程,并把副本进程的stdin和stdout连接到当前进程的两个pipe上,我是需要load另一个与当前进程无关的program
young_wind 2002-07-24
  • 打赏
  • 举报
回复
...

int fd1[2],fd2[2];
pid_t pid;

if(pipe(fd1)<0){
...}
if(pipe(fd2)<0){
...}

if((pid=fork())==0)
{
close(fd1[1]);
close(fd2[0]);
dup2(fd1[0],STDIN_FILENO);
dup2(fd2[1],STDOUT_FILENO);
...
}

...

wake2000 2002-07-23
  • 打赏
  • 举报
回复
首先创建一对管道,创建子进程后,用

dup2( nPipe1, fileno( stdin ));
dup2( nPipe2, fileno( stdout ));

即可实现标准输出和标准输入的重定向;

此刻子进程从nPipe1中读取输入数据,输出写到nPipe2管道中。printf打印出的东西也就写道nPipe2管道中,而不是打印到屏幕上。

注意,对应标准输入的管道不能写,对应标准输出的管道不能读。
pf_ma 2002-07-23
  • 打赏
  • 举报
回复
如果程序截留其他进程的stdin 和 stdout不大可能的话,
如何创建一个子进程并同时获得它的输入输出?
daehappy 2002-07-21
  • 打赏
  • 举报
回复
up!gz!
wake2000 2002-07-19
  • 打赏
  • 举报
回复
你想用程序截留其他进程的stdin 和 stdout?不大可能。

如果想将本进程的stdin 和 stdout 重定向到其他管道中,可以用 dup2() 函数。
ajiefudan 2002-07-19
  • 打赏
  • 举报
回复
stdin,stdout是系统的,跟进程无关吧
yetiwolf 2002-07-19
  • 打赏
  • 举报
回复
进程中,标准输入stdin对应的输出码为0,stdout为1,stderr为2
采用popen函数,可以获取其输出。

19,610

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧