1

悪魔化プログラムを作成しています。正常に動作しますが、言及されたファイルに出力が生成されません。デーモン化のために私が書いたプログラムは正しいですか? また、このプログラムは出力を逆の順序で生成します。理由を説明できる人はいますか?

出力:

Closing File descriptors
Child Created.Exiting Parent

プログラム :

int main(void)
{

    pid_t pid, sid;
    int i=0;
    pid = fork();
    if (pid < 0) {
            exit(EXIT_FAILURE);
    }
    if (pid > 0)
    {
            cout<<"Child Created.Exiting Parent\n";
            exit(EXIT_SUCCESS);
    }
    umask(0);
    sid = setsid();
    if (sid < 0)
    {
            exit(EXIT_FAILURE);
    }
    if ((chdir("/home/csgrad/suryakum/checking")) < 0)
    {
          cout<<"Directory not changed\n";
          exit(EXIT_FAILURE);
    }
    cout<<"Closing File descriptors\n";
    close(STDIN_FILENO);
    close(STDOUT_FILENO);
    close(STDERR_FILENO);
    while (1)
    {
            i++;
            ofstream outputFile("program3data.txt");
            outputFile<< "Run "<<i<<"\n";
            sleep(30); /* wait 30 seconds */
    }
    exit(EXIT_SUCCESS);
}
4

2 に答える 2

1

ここで見逃しているファイル処理の基本的なことの 1 つは、ファイルに書き込むためにストリームを開くときはいつでも、そのストリームを閉じる必要があるということです。ファイルへの書き込み後に次の行を追加します。

outputFile.close();
于 2012-10-30T12:45:50.913 に答える
0

The declaration of ofstream outputFile("program3data.txt"); should occur outside the while.

Also , this program produces the output in reverse order.

The order is indeterminate, execution after the fork() occurs in parallel.

于 2012-10-29T17:36:57.553 に答える