当前位置: 技术问答>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]);
就不能通过父进程打印,虽然打印出来了,可是是子进程打印出来的.
为什么?谢谢
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);
dup2(fd[1],1);