文件读写是一个常见且重要的操作,今天就来熟悉一下文件读写函数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;
}