Linux服务器 - 文件操作 | 突然宕机的解决之道

起语:

版权声明: 腾讯课堂->奇牛学院.
我只是用来方便学习 && 复习!!! 我只是一个学习者, 内功有限, 大家看到谨慎参考!!! 我建议多看官方文档.
在这里插入图片描述

解决之道

在这里插入图片描述

#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 TOTAL 10

int main(int argc, char *argv[])
{
    const char *TEXT = "This is a test.\n";
    const char *filename = "./write.txt";
    int fd = -1;
    int i = 0;

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

    for (i = 0; i < TOTAL; i++)
    {
        //sleep(1);
        if (writeToFile(fd, TEXT, strlen(TEXT)) < 0)
        {
            fprintf(stderr, "write to %s failed, reason: %s. \nexit. \n", filename, strerror(errno));
        }

        printf(" %d\n", i+1);
    }
    printf(" finished. \n");

    int ret = fsync(fd);
    if (ret) fprintf(stderr, "write failed. reason: %s\n", strerror(errno));

    printf("Start to sleep 30 seconds .......\n");
    sleep(30);

    close(fd);
    return 0;
}

int writeToFile(int fd, char *buf, int len)
{
    int wlen = 0;
    if (wlen = write(fd, buf, len) < 0)
    {
        fprintf(stderr, "write to %d failed. reason: %s \n", fd, strerror(errno));
        return -1;
    }

    //fsync(fd); 这样子影响效率问题, 每次写一点就调用 fsync(), 但是磁盘的存储单位是块, 因此并不好!
    return wlen;
}

具体操作

在这里插入图片描述
#利用这30秒来模拟宕机
在这里插入图片描述
在这里插入图片描述
#再开机
在这里插入图片描述
测试 ok

结语:

在这里插入图片描述

时间: 2020-08-20

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值