在尝试模拟bash
命令时,我还需要写入名为errors.log
的文件
任何有问题的输出,如果来自用户的给定命令失败。
我尝试输入一些错误的输入,但所需的文件未按预期更新。
这是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;
}
答案 0 :(得分:0)
将消息写入error.log(或更确切地说,其文件指针)后,立即用fflush()将其刷新。此外,在程序退出之前,请确保将其关闭。
由于您在main()中,您可能还会考虑使用错误值返回而不是退出(EXIT_FAILURE)。
我不确定,但是如果你在文件指针上写了一些东西并且它没有出现,那可能是因为它被缓冲了。立即退出可能不会让你的程序干净利落。尝试做所有3:fflush,fclose,并返回而不是退出。看看是否有效......