打开管道到程序并将其放入标准输入

时间:2015-05-19 10:43:33

标签: c++ pipe exec fork execvp

所以我试着执行一个用户给出的程序,比如uns系统上的ls。并将所有这些保存到字符串中,以便将其存储在地图中。

我需要调用的程序是Variables [key](这是map),这是用户提交的命令,之后我想用它创建的字符串保存它。这是我试图适应它的代码,最初是重定向到文件,但是在尝试将其与字符串流一起使用时遇到了问题。在此先感谢任何帮助< 3

    string key = argv[1];

    int fds[2];
    int count;
    int fd;
    char c;
    pid_t pid;

    pipe(fds);


    if (fork() == 0)
    {

        dup2(fds[0], 0);


        close(fds[1]);

        stringstream ss;

        while ((count = read(0, &c, 1)) > 0)
        {
                ss << &c;
        }

        string temp;
        ss >> temp;
        cout << temp << endl;


        execlp("echo", "echo", NULL);


    }
    else if ((pid = fork()) == 0)
    {
        dup2(fds[1], 1);

        close(fds[0]);

        cout << argv[1] << argv << endl;

        execvp(argv[1], argv);
        perror("execvp failed");

    }
    else
    {
            waitpid(pid, NULL, 0);
            close(fds[0]);
            close(fds[1]);
    }

1 个答案:

答案 0 :(得分:0)

而不是:

ss << &c;

使用此:

 ss << c;

您要做的是在流中写入char*,假定它是一个以空字符结尾的字符串。但是,它只是一个char而不是一个以null结尾的字符串,所以你所做的是未定义的行为。相反,您应该将该字符写入流中。