一个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的大小就能解决问题。
但不知道怎么解决!!!