管道读取的问题

hahahaha5211 2010-03-25 02:30:22

if( pipe(gMyInfo.fdIn) != 0 || pipe(gMyInfo.fdOut) != 0){
printf("create pipe Error\n");
return -1;
}
if(( pid = vfork()) < 0){
printf("vfork failed\n");
}
else if ( pid == 0){
close(gMyInfo.fdOut[1]);//write close
if( STDIN_FILENO != gMyInfo.fdOut[0]){
if( dup2(gMyInfo.fdOut[0], STDIN_FILENO) != STDIN_FILENO){
printf("error dup2, stdin\n");
exit(1);
}
close(gMyInfo.fdOut[0]);
}
close(gMyInfo.fdIn[0]);
if( STDOUT_FILENO != gMyInfo.fdIn[1]){
if( dup2(gMyInfo.fdIn[1], STDOUT_FILENO) != STDOUT_FILENO){
printf("errror dup2, stdout\n");
exit(1);
}
close(gMyInfo.fdIn[1]);
}
execl(LFTP, "lftp", NULL, NULL);
}
else{
close(gMyInfo.fdOut[0]);
close(gMyInfo.fdIn[1]);

fifo_init();
while(gMyInfo.exit)
{
//“通过write将lftp命令写入gMyInfo.fdOut[1]“;
//"判断执行上面的命令";
//"本意是想通过read 读取gMyInfo.fdIn[0],读出lftp下载时的输出信息,但read的返回值是零。
//“是不是我上面重定向有问题";
}

close(gMyInfo.fdOut[1]);
close(gMyInfo.fdIn[0]);

fifo_deinit();
}
return 0;
}


还有就是当我把下面这一段注释掉的时候,lftp 的输出信息就会打印到屏幕上。
if( STDOUT_FILENO != gMyInfo.fdIn[1]){
if( dup2(gMyInfo.fdIn[1], STDOUT_FILENO) != STDOUT_FILENO){
printf("errror dup2, stdout\n");
exit(1);
}
close(gMyInfo.fdIn[1]);
}

但这不是我想要的,我想要的是从管道里面读出 lftp 的输出信息

...全文
89 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hahahaha5211 2010-03-26
  • 打赏
  • 举报
回复
大家帮帮忙啊
tan870426 2010-03-26
  • 打赏
  • 举报
回复
帮顶下,管道没学好,忘的差不多了
hahahaha5211 2010-03-26
  • 打赏
  • 举报
回复
…………………………………………………………
hahahaha5211 2010-03-26
  • 打赏
  • 举报
回复
XXOO……XXOO……XXOO……
lzh3ng 2010-03-26
  • 打赏
  • 举报
回复
路过。。。。。。。。。。。。。。。
hahahaha5211 2010-03-26
  • 打赏
  • 举报
回复
WOWOWOWOWOWOWOWO
hahahaha5211 2010-03-25
  • 打赏
  • 举报
回复


这是原代码

int main_loop()
{
pid_t pid;

gMyInfo.exit=1;

if( pipe(gMyInfo.fdIn) != 0 || pipe(gMyInfo.fdOut) != 0){
printf("create pipe Error\n");
return -1;
}
if(( pid = vfork()) < 0){
printf("vfork failed\n");
}
else if ( pid == 0){
close(gMyInfo.fdOut[1]);//write close
if( STDIN_FILENO != gMyInfo.fdOut[0]){
if( dup2(gMyInfo.fdOut[0], STDIN_FILENO) != STDIN_FILENO){
printf("error dup2, stdin\n");
exit(1);
}
close(gMyInfo.fdOut[0]);
}
close(gMyInfo.fdIn[0]);//read close
if( STDOUT_FILENO != gMyInfo.fdIn[1]){
if( dup2(gMyInfo.fdIn[1], STDOUT_FILENO) != STDOUT_FILENO){
printf("errror dup2, stdout\n");
exit(1);
}
close(gMyInfo.fdIn[1]);
}
execl(LFTP, "lftp", NULL, NULL);
}
else{
close(gMyInfo.fdOut[0]);
close(gMyInfo.fdIn[1]);

fifo_init("axxxa");
while(gMyInfo.exit)
{
/****/
}

close(gMyInfo.fdOut[1]);
close(gMyInfo.fdIn[0]);

fifo_deinit();
}
return 0;
}
hahahaha5211 2010-03-25
  • 打赏
  • 举报
回复
上次结贴太匆忙,所以问题还是没有搞清楚。
还希望大家多多指教。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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