我正在解析一个大型日志文件。我想根据严重性分类(严重,警告等)提取特定消息。在解析日志时,我希望根据其严重性将消息发送到给定的,生成的,特定于严重性的终端。主程序完成读取日志文件后,终端不应关闭。环境是solaris 10 / gcc 3.4.6。我找到了以下示例,它捕获了我的想法,但不能正常工作(xterm生成,但没有输出到它):
#include <stdio.h>
int main()
{
FILE *output;
int i;
output = popen ("xterm", "w");
for (i = 0; i < 10; i++)
fprintf (output, "%d\n", i);
pclose (output);
}
我没有和xterm结婚,我只是把它当作方便使用而且我喜欢标题,颜色和大小的能力。我对popen生成的句柄的写入与写入终端的输出(只是......)不一样。这个似乎就像一件容易的事情。
答案 0 :(得分:1)
管道的想法听起来很合理,但有一些问题:
您可以考虑获取xless
(一个简单的X应用程序,它可能已经是程序包的一部分,但很容易构建),并构造输出函数来执行此操作,而不是发送到终端;
xless
一次 这会给你不关闭的窗户。以下是截图示例:
可以在ftp.x.org上找到来源,如Debian package description中所述。
答案 1 :(得分:0)
一般来说,可以做的是:
1) adjust your application so it can accept a parameter that indicates what level of severity to output to stdout.
2) open three terminals from the keyboard
3) run your application in each terminal, giving each execution the appropriate command line parameter
如果您要从应用程序打开终端,对于'xterm'和其他人, - HOLD参数将在应用程序退出时停止终端关闭
答案 2 :(得分:0)
谢谢大家的精彩回复,感谢他们!
好的,听起来像是一个轻微的重新设计=)我做了一个快速原型,看起来它会起作用。将输出写入单独的严重性文件,然后在完成时,为每个文件弹出一个xterm,如
sprintf (Crit, "xterm <yadda yadda> -e sh -c 'cat <crit-log>; <yadda yadda>');
popen (Crit, "r");
写入中间日志文件实际上是一个奖励,如果他们需要在以后进行审查而无需再次通过大型日志解析程序。
再次感谢大家!