【问题标题】:Writing errors into a file将错误写入文件
【发布时间】:2012-05-24 06:27:45
【问题描述】:

在尝试模拟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

当我使用输入 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;
}

【问题讨论】:

  • 两件事:将字符串写入错误文件时,不要使用strlen(...) + 1,它也会写入不需要的零。第二个,可能与您的问题有关,也许您需要致电fflush
  • @JoachimPileborg:谢谢,你能看一下帖子中的更新吗?你的建议仍然行不通。

标签: c linux error-handling fork


【解决方案1】:

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

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

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

【讨论】:

  • 我已经完全按照您所说的进行了尝试,但它不起作用。在帖子中更新
  • 实际上,您应该 fflush(和 fclose)将错误文件发送到的文件指针。抱歉没有说清楚!您的编辑显示“fflush (stdout)”。这是冲洗标准。你应该做的是 fflush(和 fclose)errorFile。即“fflush (errorFile)”。当然,刷新标准输出没有错。但这不是你所追求的。
  • 是的,确实如此。我想要的是将命令中的确切错误消息复制到文件中。我尝试了无数方法,但似乎没有任何效果。
  • 顺便说一下,你可能想看看这个link,它讨论了打开/关闭和fopen/fclose之间的区别。你把两者混为一谈。这可能不是您的问题的原因,但它可能有点令人困惑。如果您不顾一切,请尝试使用 fopen 而不是 open 打开错误文件,然后使用 fflush/fclose。
  • 其实我很绝望,因为我的截止日期是 23:59 :) 。谢谢,我会试试你说的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
  • 2018-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多