io

来源:互联网 发布:java获取系统当前时间 编辑:程序博客网 时间:2024/06/15 18:09

文件读写是一个常见且重要的操作,今天就来熟悉一下文件读写函数read(),open(),write(),fread(),fopen(),fwrite()等操作。

#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <string.h>#include <stdlib.h>#define FILENAME "test.txt"int read_write(){    int fd = -1;    int ret = -1;    const char buf_w[] = "Hello World.";    char buf_r[32] = {0};    fd = open(FILENAME, O_RDWR | O_CREAT);    if(fd < 0)    {        perror("open");        return -1;    }    ret = write(fd, buf_w, strlen(buf_w));    if(ret != strlen(buf_w))    {        printf("ret =%d\n", ret);        perror("write");        goto out;    }    ret = lseek(fd, 0, SEEK_SET);    if(ret < 0)    {        perror("lseek");        goto out;    }    ret = read(fd, buf_r, sizeof(buf_r));    if(ret < 0)    {        perror("read");        goto out;    }    printf("read buf=%s,ret=%d\n", buf_r, ret);    fsync(fd);out:    close(fd);    return 0;}int fread_write(){    FILE *file1 = NULL;    int ret = -1;    int file_len = 0;    char buf_w[] = "wtf.";    file1 = fopen(FILENAME, "r+");    if(!file1)    {        perror("fopen");        return -1;    }    ret = fseek(file1, 0, SEEK_END);    if(ret < 0)    {        perror("fseek");        goto out;    }    file_len = ftell(file1);    if(file_len < 0)    {        perror("ftell");        goto out;    }    ret = fseek(file1, 0, SEEK_SET);    if(ret < 0)    {        perror("fseek");        goto out;    }    char * buf_r = (char *)calloc(file_len, sizeof(char));    if(!buf_r)    {        printf("calloc error!\n");        goto out;    }    memset(buf_r, 0, sizeof(char)*file_len);    ret = fread(buf_r, sizeof(char), file_len, file1);    if(ret != file_len)    {        perror("fread");        goto out;    }    printf("fread buf_r=%s -file_len=%d\n", buf_r, file_len);    ret = fwrite(buf_w, sizeof(char), strlen(buf_r), file1);    if(ret != strlen(buf_r))    {        perror("fwrite");        goto out;    }    free(buf_r);    fflush(file1);out:    fclose(file1);    return 0;}int main(int argc, char const *argv[]){    read_write();    fread_write();    return 0;}


原创粉丝点击