0

在尝试模拟bash命令时,如果来自用户的给定命令失败,我还需要写入一个称为errors.log 任何问题输出的文件。

我尝试输入一些错误的输入,但所需的文件没有按预期更新。

这是main ,它有很多代码,但如果对每个变量有任何疑问,我会把整个 main 放在上面。main 的实际操作发生在代码底部的handleSonProcess分叉和对方法的调用中:

#define BUFFER 4096
#define BUFFER2 1024
#define RUN_FOREVER 1
#define ERROR_SIGN -1
#define TRUE 1
#define FALSE 0

当我使用 intput 运行代码时ls ddddx ,输​​出应该是:

ls: cannot access ddddx: No such file or directory

我想将该输出写入errors.log文件,但没有写入。

怎么了 ?

谢谢

编辑

errorFile = open("errors.log",O_WRONLY | O_TRUNC | O_CREAT,0600);

// open errors file
// if(errorFile <= 0)
{
    sprintf(errorStr,"open: %s\n",strerror(errno));
    write(errorFile,errorStr,strlen(errorStr));
    fflush(stdout);
    perror("open");
    close(errorFile);
    return 0;
}
4

1 回答 1

0

在将消息写入 error.log(或者更准确地说,它的文件指针)后,立即使用 fflush() 刷新它。此外,在您的程序退出之前,请确保您关闭它。

由于您在 main() 中,因此您可能还考虑返回错误值而不是执行退出 (EXIT_FAILURE)。

我不确定,但如果你在文件指针上写了一些东西而它没有出现,那可能是因为它正在被缓冲。并且立即退出可能不会让您的程序干净地退出。尝试执行所有 3 个操作:fflush、fclose 并执行返回而不是退出。看看有没有效果...

于 2012-05-24T06:37:05.583 回答