read、write和lseek
1. read函数
1) 函数原型:
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
2) 函数功能:
read系统调用从文件描述符fd指向的文件中,读取count个字节到buf中。
3) 参数说明:
fd:文件描述符
buf:保存读入信息的缓存
count:要读取的字节数
返回值:如果read成功,则返回读到的字节数,如果已达到结尾,则返回0,出错
返回-1
2. write函数
1) 函数原型:
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
2) 函数功能:
write系统调用将buf所指向的缓冲区的count个字节内容写入fd指向的文件
3) 参数说明:
fd:要写入的文件
buf:要写入的信息所在的缓存
count:要写入的字节数
返回值:如果write成功,则返回写入的字节数,出错返回-1
3. lseek函数
1) 函数原型:
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fildes, off_t offset, int whence);
2) 函数功能:
lseek系统调用用来移动读写指针的位置
3) 参数说明:
fd:要操作的文件
offset:相对whence移动的位移数,允许负值
whence:起始指针,它有三个取值
SEEK_SET 从文件开始处计算偏移量
SEEK_CUR 从文件指针的当前位置开始计算偏移量
SEEK_END 从文件结尾处开始计算偏移量
文件指针值等于当前指针值加上offset的值。
返回值:调用成功时范围当前的读写位置,也就是距离文件开始处多少字节,若
有错误返回-1
4) 常见用法:
将文件读写指针移动到文件开头:
lseek(int fildes, 0, SEEK_SET);
将文件读写指针移动到文件结尾:
lseek(int fildes, 0, SEEK_END);
获取文件读写指针当前的位置
lseek(int fikdes, 0, SEEK_CUR);
注意:有些设备(或者说设备文件)不能使用lseek,linux系统不允许lseek()对tty设备进行操作,此项操作会使得lseek()范围错误代码ESPIPE