6.文件IO
//头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
-
open
man 2 open
查看opne的帮助文档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_APPEND
追加O_CREAT
创建文件- O_EXCL 与其一同使用,如果文件存在就报错
- mode权限位,最终(mode & ~umask)
- 必选项
- 返回值:返回最小的文件描述符,失败返回-1,设置erno
-
close 关闭文件符
int close(int fd);
fd open
打开的文件描述符- 返回值:成功返回0,失败返回-1,设置erno
-
read 读
ssize_t read(int fd,void *buf,size_t count);
fd
文件描述符buf
缓冲区count
缓冲区大小- 返回值
- 失败返回-1
- 成功返回读到的大小
- 0代表文件末尾
-
write
ssize_t write(int fd,void *buf,size_t count);
fd
文件描述符buf
缓冲区count
缓冲区大小- 返回值
- 失败返回-1
- 成功返回读到的大小
- 0什么也没写
例子: int fd = open(argv[1],O_RDONLY); char buf[256]; int ret = read(fd,buf,sizeof(buf)); write(STDOUT_FILENO,buf,ret); close(fd);
-
lseek 移动文件读写位置
off_t lseek(int fd, off_t offset,int whence);
fd
文件描述符offset
偏移量whence
SEEK_SET
文件开始位置SEEK_CUR
当前位置SEEK_END
结尾
- 返回值
- 成功:返回当前值到开始的长度
- 失败:返回-1,设置errno
- 作用:
- 移动文件读写位置
- 计算文件大小
- lseek的返回值
- 拓展文件
-
阻塞
-
概念:read函数在读设备或者读管道,网络的时候,输入输出设备对应/dev/tty
-
fcntl()函数非阻塞:
-
int flags = fcntl(fd,F_GETFL); falgs |=O_NONBLOCK; fcntl(fd,F_SETFL,flags);
-
-