read_write函数
1. read函数
- 函数原型: ssize_t read(int fd, void *buf, size_t count);
- 参数:
- fd:文件描述符,open函数的返回值
- buf:缓冲区,存储要读取的数据
- count:缓冲区能存取的最大字节数 sizeof(buf)
- 返回值:
- -1 :失败
- >0:读取的字节数
- =0:文件读完了
2. write函数
- 函数原型:ssize_t write(int fd, void *buf, size_t count);
- 参数:
- fd:文件描述符,open函数的返回值
- buf:缓冲区,要写到文件的数据
- count:能存取的有效字节数
- 返回值:
- -1:失败
- >0:写入到文件的字节数
- =0:读取结束
%%拷贝english.txt到一个新文件中
#include <stdio.h>
#include <unist.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string>
#include <fcntl.h>
int main(int argc, const char* argv[])
{
//打开一个文件
int fd=open("english.txt",O_RDWR);//english.txt保存在main.c同一个文件夹
printf("fd = %d\n", fd);
//打开另一个文件,写操作
int fd1 =open("temp.txt",O_WRONLY | O_CREAT, 0664);//若没有temp.txt文件,会new一个,权限为0664;
printf("fd1 = %d\n", fd1);
//从fd读取数据
char* buf[4096];//设置4K个字节的缓冲区
int len = read(fd,buf,sizeof(buf));
while(len>0){
//写入数据
int ret = write(fd2,buf, len);
printf("ret = %d\n",ret);
//继续读取下一块的数据
len = read(fd,buf,sizeof(buf));
}
close(fd);
close(fd1);
return 0;
}
lseek函数
- 函数原型: off_t lseek(int fd, off_t offset, int whence)
- 功能:
- 文件指针移动到头部:
lseek(fd,0,SEEK_SET); - 获取文件指针当前的位置:
int len = lseek(fd,0,SEEK_CUR); - 获取文件长度:
int len = lseek(fd,0,SEEK_END); - 文件拓展:
1. 文件原大小100k,拓展到1100k:lseek(fd,1000,SEEK_END);
2. 需要做一个写操作:write(fd,"a",1);
- 文件指针移动到头部: