标准IO文件定位:
fseek函数:
功能:将stream流文件中的文件指针从whence位置开始偏移offset个字节的长度。
int fseek(FILE *stream , long offset, int whence);
FILE *stream 指的是所需要定位的文件(文化定位前提是文件要被打开)
LONG offset 指的是流指针的偏移量,即将指针偏移几个字节
int whence 指的是流指针从文档的哪个位置开始偏移。
whence:有以下可选参数:
SEEK_SET 从文本的开头位置开始。
SEEK_CUR 从当前的位置开始
SEEK_END 从文件的末尾位置开始
返回值:
成功:则返回0
失败:返回-1.
类似能够操纵流指针定位的函数:
rewind()
其相当于
feek(FILE *P,o,SEEK_END );
ftell函数
long ftell(FILE *stream )
功能:获取到当前流指针所在的位置
参数:stream 指的是所要判断流指针位置的文件。
返回值:
成功:一般以文件指针到文本开始的距离字节数为返回值。
失败:-1
文件IO
定义:操作系统为了方便用户使用系统功能而对外提供的一组系统函数,称之为系统调用,其中有个文件IO。
一般是用于对设备文件进行操作,当然也可以对普通文件进行操作。
特性:
没有缓冲区。
操作对象不是在流,而是在文件描述符FILE*。
其中文件描述符的编号的范围:0~1023
内核每打开一个文件就会获得一个文件的描述符,计算机同时可以打开1024个文件不关闭。
每个程序在启动时操作系统会默认为其打开三个描述符于流对象相匹配:
0号标识符表示STDIN_FILENO 即stdin
1号标识符表示STDOUT_FILENO 即stdout
2号标识符表示STDERR_FILENO 即stderr.
stdin ,stdout,stderrd都是文件描述符
open函数:
作用:打开文件。
int open(const char *pathname,int flags,int mode);
其中const char *pathname指的是文件路径
int flags 指的是文件标志位,其决定打开文件的权限
flag有:O_CREATE 创建文件,
O_RDONLY 文件只读,
O_WRONLY 只写文件,
O_RDWR 读写文件,
O_APPEND 文件追加,
O_TRUNC 文件清空。
int mode指的是所创建出文件的权限设定。一般是设定为0666,按上一个博客的八进制权限编码转换来理解。
返回值:成功时返回文件描述符
write函数:
ssize_t write(int fd,const void *buf,size _t count);
int fd :指的是所要写入的文件标识符
const void *buf指的是缓冲数组的地址
size_t count 指的是要写入文件的数据个数
返回值:
成功:返回实际写入的个数。
失败:返回EOF
read函数:
size_t read(int fd,const void *buf,size_t count);
fd指的时文件标识符。
buf指的是所读数据存放变量地址
count指的是所要读取数据的个数。
返回值:
当成功时返回:读取数据的个数
失败:返回EOF。
lseek函数:
off_t lseek (int fd, off_t offset,int whence);
int fd 指的是文件表示符。
off_t offset指的是偏移量。
int whence指的是从哪里开是偏移
offset:正值为向后偏移,负值为向前,0是在原地。
whence 取值同样是:
SEEK_SET
SEEK_CUR
SEEK_END
返回值:
成功返回偏移量,失败返回-1