使用`fork()`反转字符串

时间:2017-10-02 04:57:06

标签: c++ process fork

我尝试使用fork()在C ++中反转字符串,这样每个进程最多只打印一个字符。我的想法是,在打印完每个字符后,我fork进入一个新进程,结束父进程,然后继续。这是我的代码:

#include <string>
#include <iostream>
#include <unistd.h>

/*
    Recursively print one character at a time,
    each in a separate process.
*/
void print_char(std::string str, int index, pid_t pid)
{
    /*
        If this is the same process, 
        or the beginning of the string has been reached, quit.
    */
    if (pid != 0 || index <= -1)
      return;

    std::cout << str[index];
    if (index == 0)
    {
        std::cout << std::endl;
        return;
    }
    print_char(str, index-1, fork());
}

int main(int argc, char** argv)
{
    std::string str(argv[1]);
    print_char(str, str.length()-1, 0);
}

然而,当使用参数&#34; hey&#34;测试代码时,它会打印&#34; yeheyy&#34;。我对fork()的理解是它创建了一个带有内存空间副本的重复过程,每当我在心理上&#34;走过&#34;代码似乎应该有效,但我无法弄清楚我的逻辑失败的地方。

1 个答案:

答案 0 :(得分:2)

看来,您的代码没问题,但您在使用cout时遇到了问题。

尝试仅更改输出行

std::cout << str[index];

std::cout << str[index] << std::flush;

尝试过并为我工作。