我尝试使用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;代码似乎应该有效,但我无法弄清楚我的逻辑失败的地方。
答案 0 :(得分:2)
看来,您的代码没问题,但您在使用cout
时遇到了问题。
尝试仅更改输出行
std::cout << str[index];
与
std::cout << str[index] << std::flush;
尝试过并为我工作。