ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Day4-Linux软件编程(文件IO和目录IO输入输出(3))

Day4-Linux软件编程(文件IO和目录IO输入输出(3))

今天要学习文件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, 066
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 文件不存在创建 必须启用第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:写入的字节数 返回值: 成功返回实际写入字节数 失败返回-1

3.read

ssize_t read(int fd, void *buf, size_t count); 功能: 尝试从文件描述符fd中接收count个字节存入buf开始的空间中 参数: fd:文件描述符 buf:存放数据的空间首地址 count:尝试读取的字节数 返回值: 成功返回实际读到的字节数 失败返回-1 读到文件末尾返回0

4.lseek

off_t lseek(int fd, off_t offset, int whence); 功能: 定位文件描述符的偏移量到whence相关联的offset的位置 参数: fd:文件描述符 offset:偏移量 whence:SEEK_SET SEEK_CUR SEEK_END 返回值: 成功返回偏移量 失败返回-1

2.目录IO

1.opendir

DIR *opendir(const char *name); 功能: 打开目录获得目录流指针 参数: name:目录的路径 返回值: 成功返回目录流指针 失败返回NULL

2.closedir

6. getcwd 7. chdir int closedir(DIR *dirp); 功能: 关闭目录流指针 参数: dirp:目录流指针 返回值: 成功返回0 失败返回-1

3.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); 功能: 修改当前程序的工作路径
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进