通过管道将父进程的标准输出作为子进程的标准输入
我试图通过管道将父进程的标准输出作为子进程的标准输入,但是子进程并不能通过管道读取到数据?代码:
int main(void)
{
int fd;
pid_t pid;
if(pipe(fd) < 0) //创建管道
{
perror("pipe error");
exit(-1);
}
if((pid = fork()) < 0)// 创建子进程
{
exit(-1);
}
else if(pid == 0)
{
//puts("child start");
char buf = {0};
close(fd);
dup2(fd, 0);//将管道的读端,作为标准输入
close(fd);
gets(buf);//从标准输入中读取数据,存放在buf,相当于从fd读数据存放在buf中
puts(buf);//打印读取的数据
//puts("child end");
}
else
{
//puts("parent start");
close(fd);
write(fd, "123", 4);//往管道的写端,写入数据
wait(NULL);
}
return 0;
}
运行结果阻塞!在子进程gets(buf)处!有前辈直到这个问题吗?
你遇到进程的死锁了,具体一点就是看看进行管理原理,你也就明白了,简单点就是代码虽然是逻辑运行,但是进程在系统中不是按照顺序进行运行的,所以出现一个进程同时抢夺资源,或者同时想让资源的情况,建议加上信号量试试 A学习的小菜鸟 发表于 2022-4-24 10:48
你遇到进程的死锁了,具体一点就是看看进行管理原理,你也就明白了,简单点就是代码虽然是逻辑运行,但是进 ...
是gets的问题,gets需要接受'\n'才能正常返回!将write(fd, "123", 4);语句换成write(fd, "123\n", 4);可正常解决!
页:
[1]