64,701
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
void createFile( int argc, char *argv[] );
void linuxMmap(char* filePath);
void linuxApi(char* filePath);
//运行环境为 linux
//gcc编译代码可正常运行 g++不行
//输入参数为: ./main 5000000 1.txt
//第一个参数为可执行文件 第二个参数为带生成文件的行数 第三个文件为待生成的文件名
int main(int argc, char *argv[])
{
// if(argc != 2)
{
// printf("usage:readlog log.txt");
// return 0;
}
createFile(argc,argv);
printf("\n");
printf("\n");
printf("\n");
linuxMmap(argv[2]);
printf("\n");
printf("\n");
// linuxApi(argv[1]);
}
void createFile( int argc, char *argv[] )
{
long len = atoi( argv[1] );
FILE * fd = fopen( argv[2], "w+" );
if ( fd != NULL )
{
int i = 0;
char buff[30];
struct tm *gmTime;
time_t timeTPre = time( NULL );
for ( ; i < len; i++ )
{
time_t timeT = time(NULL);
gmTime = gmtime( &timeT );
sprintf( buff, "%4d-%02d-%02d %02d:%02d:%02d %d\n",
gmTime->tm_year + 1900,
gmTime->tm_mon + 1,
gmTime->tm_mday,
gmTime->tm_hour,
gmTime->tm_min,
gmTime->tm_sec, i );
fputs( buff, fd );
};
fclose( fd );
printf( "Log: %s is finished. \nCost time %d sec\n", argv[2], (int)(time(NULL) - timeTPre ));
}
}
void linuxMmap(char* filePath)
{
char *memory = NULL;
long file_length = 0;
char *start_address = 0;
int line_num = 0;
int time_start = time(NULL);
int fd = open( filePath, O_RDONLY );
if ( fd > 0 )
{
file_length = lseek(fd, 1, SEEK_END);
memory = mmap( start_address, file_length, PROT_READ, MAP_SHARED, fd, 0 );
long i=0;
for ( ; i<file_length; i++ )
{
if ( memory[i] == '\n' )
{
++line_num;
}
}
close( fd );
munmap( memory, file_length );
printf("Finished, total lines is %d \n", line_num);
printf("total costed time %d sec\n", (int)(time(NULL) - time_start));
}
}