对于execl,dup2()是否必需 [英] Is dup2() necessary for execl

查看:5
本文介绍了对于execl,dup2()是否必需的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用管道时是否需要将stdin替换为pipe结尾?

我有一个应用程序:-

  • 创建管道,
  • 派生一个子进程,然后
  • execl()新子进程中的新进程映像,

但我遇到了两个概念性问题。

  1. 是否需要用dup()dup2()替换stdin?显然,只使用管道中的fd会更容易。(我不需要对此有什么了解)

  2. 如果您只能使用管道中的fd,当execl采用char *参数时,如何使用execl()传递整数fd

我很难弄清楚在执行execl()之后什么仍然是打开的,以及如何从新执行的进程访问该信息。

推荐答案

您可能正在尝试将数据馈送到系统上存在的子进程,但如果您也在写入子进程,则不需要使用dup()stdin

execl()使父进程中所有打开的文件描述符保持打开状态,以便您可以:

int fd[2];
pipe(fd);
if (fork() == 0)
{
    char tmp[20];
    close(fd[1]);
    snprintf(tmp, sizeof(tmp), "%d", fd[0]);
    execl("client", tmp, NULL);
    exit(1);
}

在客户端的代码中:

int main(int argc, char** argv)
{
    int fd = strtod(argv[1], NULL, 10);
    /* Read from fd */
}

这篇关于对于execl,dup2()是否必需的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆