Linux文件编程的小结和补充
基于上节课我们对文件内容读取的时候,光标移动的方式是重新打开文件,我们使用一个特殊的函数进行优化
lseek函数使用
头文件:
#include <sys/types.h>
#include <unistd.h>
函数原型:
off_t lseek(int fd, off_t offset, int whence);
参数:
fd:文件标识符
off_t offset:偏移值,相对于whence的偏移值,负数向前移动,正数向后移动
int whence:
SEEK_SET:(头)
The offset is set to offset bytes.
SEEK_CUR:(当前光标位置)
The offset is set to its current location plus offset bytes.
SEEK_END:(尾)
The offset is set to the size of the file plus offset bytes.
返回值:
和头相比偏移多少个字节
案例优化
lseek(fd,0,SEEK_SET);
char *readBuf;
readBuf=(char *)malloc(sizeof(char)*n_write+1);//给readBuf开辟空间存放,write的内容
int n_read=read(fd,readBuf,n_write);
printf("read %d ,context:%s\n",n_read,readBuf);
close(fd);
return 0;
计算文件大小(文件必须存在)
int main()
{
int fd;
fd=open("./file1",O_RDWR);
int file_size=lseek(fd,0,SEEK_END);
printf("file size is :%d\n",file_size);
close(fd);
return 0;
}
小结:
Linux提供的一系列API对文件操作
打开:open
读写:write/read
光标定位:lseek
关闭:close
注:fd文件描述符
Linux默认 0为标准输入 1为标准输出 2为标准版错误 所以一般是从3开始
流程:
- 打开/创建文件
- 读取文件/写入文件
- 关闭文件
动态文件:
Linux内核会产生一个结构体
struct
{
fd;
信息节点;
buf(内存中一个缓冲区)
}
当文件close后,会存回磁盘中
下一章将会有两个小练习!