关于32位机大文件写测试

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值