我正在编写一个deamonizing program.Its工作正常,但不会在提到的文件中产生任何输出。我为deamonizing编写的程序是否正确?此外,该程序以相反的顺序生成输出。任何人都可以解释原因吗?
输出:
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);
}
答案 0 :(得分:1)
这里缺少文件处理的基本内容之一就是每当我们打开一个流来写入一个文件时,我们必须关闭该流。 写入文件后添加以下行。
outputFile.close();
答案 1 :(得分:0)
ofstream outputFile("program3data.txt");
的声明应在while
之外发布。
此外,该程序以相反的顺序生成输出。
订单是不确定的,在fork()
并行发生后执行。