linux文件IO
作者:互联网
1.open/close
函数原型:
int open(const char *pathname,int flags);
int open(const char *pathname,int flags,mode_t mode);
参数:
pathname:文件名
flags:
必选项:O_RDONLY,O_WRONLY,O_RDWR
可选性:
创建文件:O_CREAT
创建文件时检测文件是否存在:O_EXCL,文件存在则返回-1,需与O_CREAT一起使用
追加内容:O_APPEND
文件截断:O_TRUNC
设置非阻塞:O_NONBLOCK
mode:创建的文件的权限
文件实际得到的权限为mode&~umask,umask为系统的掩码(可通过umask命令查看),设置权限时需注意。
2.read
函数原型:ssize_t read(int fd,const void *buf,size_t count)
参数:
fd:文件描述符
buf:缓冲区,存储读取到的数据
count:缓冲区能存储的最大字节数sizeof(buf)
返回值:
-1:读取失败
>0:读取到的字节数
=0:读取完毕
3.write
函数原型:ssize_t write(int fd,const void *buf,size_t count)
参数:
fd:文件描述符
buf:写到文件的数据
count:strlen(buf)
返回值:
-1:写入失败
>0:写入的字节数
=0:写入完毕
4.lseek
函数原型:off_t lseek(int fd, off_t offset, int whence);
参数:
fd:文件描述符
offset:偏移量,int型,正数为向后偏移,负数为向前偏移
whence:SEEK_SET:将文件指针偏移到传入字节数处
SEEK_CUR:将文件指针偏移到当前位置加上传入字节数处
SEEK_END:将文件指针偏移到文件末尾加上传入字节数处
返回值:当lseek执行成功时,它会返回最终以文件起始位置为起点的偏移位置。如果出错,则返回-1,同时errno被设置为对应的错误值。
使用:
文件指针移动到头部:lseek(fd,0,SEEK_SET);
获取文件指针当前的位置:lseek(fd,0,SEEK_CUR);
获取文件长度:lseek(fd,0,SEEK_END);
文件拓展:
例:文件原来大小为100k,拓展为1100k
lseek(fd,1000,SEEK_END);
最后执行一次写操作,不然拓展失败
write(fd,“a”,1);
5.阻塞和非阻塞
阻塞是文件的属性,打开文件时设置文件的读写操作为阻塞,则在读取不到文件内容时,程序不会继续往下执行。
文件的属性:
普通文件:例:hello.c
默认为不阻塞,read读取内容,无论有无读取到,程序都往下执行
终端设备:例:/dev/tty、管道、套接字等
默认阻塞,read读取不到内容时,程序不会继续执行
标签:文件,读取,lseek,int,fd,IO,linux,SEEK 来源: https://www.cnblogs.com/czhdbk/p/14398141.html