当前位置:  技术问答>linux和unix

为什么这样用就不行,关于dup函数的问题.

    来源: 互联网  发布时间:2015-01-03

    本文导语:  我创建了一对管道 char szBuffer[81]; int fd[2]; pipe(fd); 然后创建子进程 childpid=fork(); if(childpid==0) {    close(1);    dup(fd[1]);    execlp("ls","","-l",NULL); } else {    close(fd[1]);    while(1)    {          memset(szBuffer,0,81); ...

我创建了一对管道
char szBuffer[81];
int fd[2];
pipe(fd);
然后创建子进程
childpid=fork();
if(childpid==0)
{
   close(1);
   dup(fd[1]);
   execlp("ls","","-l",NULL);
}
else
{
   close(fd[1]);
   while(1)
   {
         memset(szBuffer,0,81);
         if(read(fd[0],szBuffer,80))
               printf(szBuffer);
         else
               break;
    }
}这样就正常的通过父进程将ls命令的输出打印出来.
如果将
close(1);
dup(fd[1]);
改成
dup2(1,fd[1]);
就不能通过父进程打印,虽然打印出来了,可是是子进程打印出来的.
为什么?谢谢

|
dup2参数给反了
dup2(fd[1],1);

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux备份工具 Deja Dup
  • 请问 dup(fd1, fd2) 和 fd2=fd1的区别
  • Unix高级环境编程一有关dup2的习题,求解释!!!!
  • 调试dup与pipe结合的简单程序
  • dup2后的奇异现象
  • dup2(fd[0],STDIN_FILENO)!=STDIN_FILENO疑问
  • 利用fork 与 dup2 执行 系统命令, 别的命令都可以获取执行结果,就fdisk 命令不可以. execve("/sbin/fdisk",args,NULL) , args 命令参数.
  • 急: 代码那里写错了??dup2 execve写的执行命令的程序, 重定向标准输入、输出、标准错误,无法获取到fdisk 的命令输出。别的命令都可以。附代码


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3