Linux服务器 - 文件操作 | Linux文件IO深入剖析(直接IO和标准文件IO对比)

直接IO和标准文件IO对比

具体代码
直接IO的代码

#define _GNU_SOURCE
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>

#define BUF_SIZE 512
int debug = 0;

int main(int argc, char *argv[])
{
    char *buf = NULL ;
    const char *filename = "./write.txt";
    int fd = -1;
    time_t start, cur;
    int rlen = 0,ret = 0;
    static int read_total = 0;

    ret = posix_memalign((void **)&buf, 512, BUF_SIZE);
    if (ret) fprintf(stderr, "posix_memalign failed. reason: %s\n", strerror(errno));

    start = time(NULL);

    do{
        read_total++;
        fd = open(filename, O_RDWR | O_DIRECT);
        if (fd < 0)
        {
            fprintf(stderr, "fopen %s failed, reason: %s. \nexit. \n", filename, strerror(errno));
            return -1;
        }

        do{
            if (rlen = read(fd, buf, BUF_SIZE) < 0)
            {
                fprintf(stderr, "read from %s failed, reason: %s. \nexit. \n", filename, strerror(errno));
            }
            if (debug) printf("read: %d\n", rlen);
        }while(rlen > 0);

        printf(" finished.\n");
        close(fd);

        cur = time(NULL);
    }while((cur-start) < 20);

    printf("total num: %d\n", read_total);

    return 0;
}

具体操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
标准IO的代码

#define _GNU_SOURCE
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>

#define BUF_SIZE 512
int debug = 0;

int main(int argc, char *argv[])
{
    char *buf = NULL ;
    const char *filename = "./write.txt";
    int fd = -1;
    time_t start, cur;
    int rlen = 0,ret = 0;
    static int read_total = 0;

    ret = posix_memalign((void **)&buf, 512, BUF_SIZE);
    if (ret) fprintf(stderr, "posix_memalign failed. reason: %s\n", strerror(errno));

    start = time(NULL);

    do{
        read_total++;
        //fd = open(filename, O_RDWR | O_DIRECT);
        fd = open(filename, O_RDWR);
        if (fd < 0)
        {
            fprintf(stderr, "fopen %s failed, reason: %s. \nexit. \n", filename, strerror(errno));
            return -1;
        }

        do{
            if (rlen = read(fd, buf, BUF_SIZE) < 0)
            {
                fprintf(stderr, "read from %s failed, reason: %s. \nexit. \n", filename, strerror(errno));
            }
            if (debug) printf("read: %d\n", rlen);
        }while(rlen > 0);

        //printf(" finished.\n");
        close(fd);

        cur = time(NULL);
    }while((cur-start) < 20);

    printf("total num: %d\n", read_total);

    return 0;
}

在这里插入图片描述
运行结果
在这里插入图片描述
没有对比就没有伤害
在这里插入图片描述

结语:

时间: 2020-08-15

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值