今天要学习文件IO和目录IO的一些操作,了解了标准IO与文件IO还有目录IO这三者的区别,以及系统调用和库函数调用的一些区别,文件IO的接口open,read,close,write,还有一些函数接口
一.文件IO
1标准IO与文件IO的区别
1.标准IO是库函数
2.标准IO是对文件IO的封装
3.有缓存,不适合操作设备文件、通信相关文件
2.文件IO
1.文件IO是系统调用
2.是没有缓存的,可以用于操作设备文件和通信相关文件
3.系统调用和库函数的区别
1. 库函数
.对系统调用的封装,最终会调用系统调用完成功能
.库函数移植性比较好
2.系统调用
1.Linux内核中的函数接口
2.移植性差
4.函数接口
1.open
标准IO 文件IO r O_RDONLY r+ O_RDWR w O_WRONLY | O_CREAT | O_TRUNC, 0664 w+ O_RDWR | O_CREAT | O_TRUNC, 0664 a O_WRONLY | O_CREAT | O_APPEND, 0664 a+ O_RDWR | O_CREAT | O_APPEND, 066int 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 文件不存在创建 必须启用第3个参数mode rwxrwxrwx rw-rw-r-- O_EXCL 文件存在报错 O_TRUNC 文件存在清0 O_APPEND 追加 返回值: 成功返回文件描述符 失败返回-1文件描述符规律:总是取最小的非负整数
三个默认打开的文件描述符
0:标准输入
1:标准输出
2:标准错误
2.write
ssize_t write(int fd, const void *buf, size_t count); 功能: 向文件描述符中写入buf开始的count个字节 参数: fd:文件描述符 buf:要写入的数据空间的首地址 count:写入的字节数 返回值: 成功返回实际写入字节数 失败返回-13.read
ssize_t read(int fd, void *buf, size_t count); 功能: 尝试从文件描述符fd中接收count个字节存入buf开始的空间中 参数: fd:文件描述符 buf:存放数据的空间首地址 count:尝试读取的字节数 返回值: 成功返回实际读到的字节数 失败返回-1 读到文件末尾返回04.lseek
off_t lseek(int fd, off_t offset, int whence); 功能: 定位文件描述符的偏移量到whence相关联的offset的位置 参数: fd:文件描述符 offset:偏移量 whence:SEEK_SET SEEK_CUR SEEK_END 返回值: 成功返回偏移量 失败返回-12.目录IO
1.opendir
DIR *opendir(const char *name); 功能: 打开目录获得目录流指针 参数: name:目录的路径 返回值: 成功返回目录流指针 失败返回NULL2.closedir
6. getcwd 7. chdir int closedir(DIR *dirp); 功能: 关闭目录流指针 参数: dirp:目录流指针 返回值: 成功返回0 失败返回-13.readdir
struct dirent *readdir(DIR *dirp); 功能: 从流中读取一个目录项 参数: dirp:目录流指针 返回值: 成功返回目录项信息空间首地址 失败返回NULL 读到目录的末尾返回NULL struct dirent { ino_t d_ino; /* Inode number */ off_t d_off; /* Not an offset; see below */ unsigned short d_reclen; /* Length of this record */ unsigned char d_type; /* Type of file; not supported by all filesystem types */ char d_name[256]; /* Null-terminated filename */ };4.mkdir
r:进入目录是否能够读取目录下所有的目录项信息 w:能够在目录下新建、删除文件 x:是否能够进入目录5.rmdir
6.getcwd
char *getcwd(char *buf, size_t size); 功能: 获得当前程序的工作路径7.chdir
int chdir(const char *path); 功能: 修改当前程序的工作路径