今天要学习文件IO和目录IO的一些操作了解了标准IO与文件IO还有目录IO这三者的区别以及系统调用和库函数调用的一些区别文件IO的接口openreadclosewrite还有一些函数接口一.文件IO1标准IO与文件IO的区别1.标准IO是库函数2.标准IO是对文件IO的封装3.有缓存不适合操作设备文件、通信相关文件2.文件IO1.文件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.writessize_t write(int fd, const void *buf, size_t count); 功能 向文件描述符中写入buf开始的count个字节 参数 fd:文件描述符 buf:要写入的数据空间的首地址 count:写入的字节数 返回值 成功返回实际写入字节数 失败返回-13.readssize_t read(int fd, void *buf, size_t count); 功能 尝试从文件描述符fd中接收count个字节存入buf开始的空间中 参数 fd:文件描述符 buf:存放数据的空间首地址 count:尝试读取的字节数 返回值 成功返回实际读到的字节数 失败返回-1 读到文件末尾返回04.lseekoff_t lseek(int fd, off_t offset, int whence); 功能 定位文件描述符的偏移量到whence相关联的offset的位置 参数 fd:文件描述符 offset:偏移量 whence:SEEK_SET SEEK_CUR SEEK_END 返回值 成功返回偏移量 失败返回-12.目录IO1.opendirDIR *opendir(const char *name); 功能 打开目录获得目录流指针 参数 name:目录的路径 返回值 成功返回目录流指针 失败返回NULL2.closedir6. getcwd 7. chdir int closedir(DIR *dirp); 功能 关闭目录流指针 参数 dirp:目录流指针 返回值 成功返回0 失败返回-13.readdirstruct 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.mkdirr进入目录是否能够读取目录下所有的目录项信息 w能够在目录下新建、删除文件 x是否能够进入目录5.rmdir6.getcwdchar *getcwd(char *buf, size_t size); 功能 获得当前程序的工作路径7.chdirint chdir(const char *path); 功能 修改当前程序的工作路径