【发布时间】:2016-05-16 23:58:36
【问题描述】:
我开发的这段代码只是为了解决我正在开发的另一个大型程序中遇到的问题。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <cstring>
#include <cstdlib>
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
#include <limits.h>
#include <string>
#include <iostream>
using namespace std;
void processLine (char []);
void readLine(char []);
const int LIMIT = 512;
int main(int argc, char *argv[])
{
char oneLine[LINE_MAX];
readLine(oneLine);
return 0;
}
void readLine(char line[])
{
processLine(line);
printf("Annoying line\n");
}
void processLine(char line[])
{
pid_t process;
int child_status;
string input;
cout << "Input: ";
cin >> input;
process = fork();
if(process == 0)
{ // do nothing
}
else
{
//parent
if(input == "quit")
{
printf("Quit command found ! \nExiting ");
for(int i = 0;i < 3;i++)
{
printf(".");
fflush(stdout);
sleep(1);
}
printf("\n");
exit(0);
}
else
{
wait(&child_status);
}
}
}
我的目标很简单,当用户输入退出时。
我只会展示
找到退出命令
退出...
这三个点之间的每个点之间都有一秒的延迟。
但是我得到的输出是
找到退出命令
退出。烦人的线..
我想知道这条恼人的行怎么会在第一个点之后打印,即使它来自调用函数并且轮到它打印到终端了????
任何想法。我花了 10 个小时试图解决这个问题
【问题讨论】:
-
我认为父进程在分叉后仍在继续并打印该行。孩子已经很好地终止了......请注意,烦人的线出现在第一个点之后,然后孩子睡觉,父母获得 CPU 时间,返回并打印。
-
@PaulOgilvie,那么我将如何解决这个问题?
-
不要打印
Annoying Line。无论如何,您想解决什么问题?这是正确的代码。 -
在我的原始代码中,我调用processLine函数后必须继续打印,我只是为了解决这个问题而编写了这段代码
-
但是有什么问题呢?你打印了一行,现在抱怨它打印了一行?严重地?也许是您对
fork()所做的事情的理解存在缺陷。也许回到那个代码是错误的?
标签: c fork stdout flush fflush