打印

为什么利用重定向一个文件写日志信息很慢,各位高手有什么办法解决么!!!

为什么利用重定向一个文件写日志信息很慢,各位高手有什么办法解决么!!!

为什么利用重定向一个文件写日志信息很慢,各位高手有什么办法解决么!!!


比如 我执行一个进程 abc,然后把日志写入一个文件abc.log,即 abc >abc.log  ,不知为什么不是每打印一行日志,就立即写入abc.log中,而是需要打印10行以上才能写入文件。

这是不是什么缓存的问题啊。

请各位帮忙解决一下咯

TOP

一个socket的server端程序my_server,由于该程序只有打印信息而没有写日志的功能,所以运行时我用 my_server >;>; server_log.log来记录日志。但是发现日志并不能实时记录my_server的输出信息,大概要滞后1k字节,这样log的实时性就太弱了。
如果要让日志实时记录my_server的输出,可以用什么办法呢?

我做了一个测试
1、编写以下程序:a.c
/*file "a.c"*/
int main()
{
        int i;
        for (i=0; i<60; i++)
        {
                printf("i = %d\n", i);
                sleep(1);
        }

}

2、编译 cc a.c
3、运行 a.out >; a_out.log
4、在程序运行的一分钟内用"ls -l a_out.log"观察"a_out.log"的变化
结果发现a_out.log在a.out运行的时刻即被创建,但a_out.log文件的大小一直为0,直到一分钟后a.out运行完成并退出,a_out.log文件的大小才变为410。

测试结果表明a_out.log是在程序启动时刻创建,但是是在退出的时刻才写入。






2、另一程序 "b.c"
/*file "b.c"*/
int main()
{
        int i, n;
        for (i=1; i<=60; i++)
        {
                for (n=0; n<100; n++){
                        printf("%d ", n);
                }
                printf("\n i = %d\n", i);
                sleep(1);
        }
        return 0;
}


2、编译 cc b.c -o b.out
3、执行 b.out >; b_out.log
4、用ls -l 观察 b_out.log,发现b_out.log在程序运行时刻被创建,在运行期限被修改五次,在此四个时刻观察"b_out.log",i的值分别为13、27、41、55、60。

以上说明在程序运行期间"b_out.log"有被修改过,且每次写入的字节数相近。


我是认为重定向的写入是有buff的,只有当buff满了,或者程序退出的时候才会将buff写入文件,而这个buff的大小是1k。所以如果能调整buff的大小就能解决问题。

但不知道怎么解决!!!

TOP


感谢一直以来您对我们的支持!
当前时区 GMT+8, 现在时间是 2008-10-13 09:18 京ICP证060528 号

Designed By 17DST