#define _LARGEFILE64_SOURCE
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <signal.h>
#include <errno.h>
#include <sys/time.h>
#define FLG 1
char *buf;
int errno;
void sig_int(int signo)
{
if (signo == SIGINT)
{
if (buf != NULL)
{
free(buf);
buf = NULL;
}
exit(0);
}
}
int main(void)
{
#if FLG
int fd;
#else
FILE *fp;
#endif
int len = 1024*1024*2;//100M Bytes
printf("len = %d\n\n", (len>>20));
struct timeval t_start, t_end;
long t_diff, t_sum = 0, file_size = 0, file_size_tmp = 0;
double avg;//sum = 0;
#if FLG
fd = open("test.file", O_CREAT|O_TRUNC|O_LARGEFILE|O_RDWR, 0666);
#else
if ((fp = fopen("test.file", "wt+")) == NULL)
{
printf("fopen error %d\n", errno);
exit(-1);
}
#endif
buf = (char *)calloc(1, len);
signal(SIGINT, sig_int);
while (1)
{
gettimeofday(&t_start, NULL);
#if FLG
if (write(fd, buf, len) < 0)
{
printf("write error %d\n", errno);
if (buf != NULL)
{
free(buf);
buf = NULL;
}
exit(-1);
}
#else
//if (fwrite(buf, len, 1, fp) == 0)
if (fwrite(buf, 1, len, fp) == 0)
{
printf("fwrite error %d\n", errno);
if (buf != NULL)
{
free(buf);
buf = NULL;
}
exit(-1);
}
#endif
gettimeofday(&t_end, NULL);
t_diff = 1000000 * (t_end.tv_sec-t_start.tv_sec) + (t_end.tv_usec-t_start.tv_usec);
t_sum += t_diff; //time
file_size += (len>>20); //file size
if (file_size >= 100) //every 100M
{
file_size_tmp += file_size;
avg = file_size * 1.0 / (t_sum * 1.0 / 1000000);
printf("t_diff = %ldus, avg = %fM/s, file_size = %ldM Bytes\n",
t_diff, avg, file_size_tmp);
file_size = 0;
t_sum = 0;
}
}
return 0;
}
关于32位机大文件写测试
最新推荐文章于 2023-09-17 13:06:08 发布