fprintfs输入的数据要先进入一个缓冲区
所以它输出完后要加一个fflush 给它冲刷一下!强制刷新缓冲区!!!!!
缓冲区
之所以stdin是0,是因为此时没有输入操作,就不会开辟这个空间。
./a.out >buf.txt 输出重定向
./a.out >>buf.txt 输出重定向 (追加的方式)
./a.out <buf.txt 输入重定向
./a.out <<buf.txt 输入重定向 ( 追加的方式)
缓冲区1024(1k) 变成4096(4k)了
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
int lineCnt(FILE *fp)
{
int cnt = 0;
char buf[10];
while (fgets(buf,sizeof(buf),fp) != NULL)
{
if (buf[strlen(buf) - 1] == '\n')
cnt++;
}
return cnt;
}
void do_log(FILE *fp)
{
//1.统计行数
int lines = lineCnt(fp);
//2.输出数据
while (1)
{
time_t t = time(NULL);
struct tm *ptm = localtime(&t);
lines++;
fprintf(stdout,"%d,%04d-%02d-%02d %02d:%02d:%02d\n",lines,ptm->tm_year+1900,ptm->tm_mon+1,ptm->tm_mday,ptm->tm_hour,ptm->tm_min,ptm->tm_sec);
fprintf(fp,"%d,%04d-%02d-%02d %02d:%02d:%02d\n",lines,ptm->tm_year+1900,ptm->tm_mon+1,ptm->tm_mday,ptm->tm_hour,ptm->tm_min,ptm->tm_sec);
fflush(fp);
sleep(1);
}
}
//./a.out 1.txt
int main(int argc, const char *argv[])
{
if (argc != 2)
{
printf("Usage: %s <filename>\n",argv[0]);
return -1;
}
FILE *fp = fopen(argv[1],"a+");
if (fp == NULL)
{
perror("fopen fail");
return -1;
}
do_log(fp);
fclose(fp);
return 0;
}