特点
1、posix(可移植操作系统接口)定义的一组函数
2、不提供缓冲机制,每次读写操作都引起系统调用
3、核心概念是文件描述符
4、访问各种类型文件
5、Linux下, 标准IO基于文件IO实现
一、open函数
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
功能:打开一个文件,获得文件的文件描述符
参数:
pathname:指定打开的文件路径及名字
flags:文件的访问权限
mode:与O_CREAT同时存在才生效。指定文件的创建权限(mode & ~umask)
标准IO 文件IO
r O_RDONLY
r+ O_RDWR
w O_WRONLY | O_CREAT | O_TRUNC
w+ O_RDWR | O_CREAT | O_TRUNC
a O_WRONLY | O_CREAT | O_APPEND (O_APPEND O_CREAT O_TRUNC)
a+ O_RDWR | O_CREAT | O_APPEND 追加 创建 清空
返回值:
成功非负数的文件描述符,失败-1
注意:
最多可以获得1024个文件描述符
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/941b244e2355f90b2af1a8b8bf3dad26.png)
以只写方式打开文件a.txt。如果文件不存在则创建,如果文件存在则清空:
open("a.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666);
……
以读写方式打开文件b.txt。如果文件不存在则创建,如果文件存在则报错:
#include <stdio.h>
#include <fcntl.h>
int main()
{
int fd;
if ((fd = open("b.txt", O_RDWR|O_CREAT|O_EXCL, 0666)) < 0)
{
if (errno == EEXIST)
{
perror("exist error");
}
else
{
perror("other error");
}
}
return 0;
}
二、close函数
int close(int fd);
功能:关闭文件
返回值:成功时返回0;出错时返回EOF
程序结束时自动关闭所有打开的文件
文件关闭后,文件描述符不再代表文件
三、read函数
size_t read(int fd, void *buf, size_t count);
功能:从文件fd中期望读取count字节的数据存储到buf内
参数:
fd:要读的文件的文件描述符
buf:接收数据的缓冲区
count:期望读取的字节数, count不应超过buf大小
返回值:
成功时返回实际读取的字节数;
出错时返回EOF
读到文件末尾时返回0
四、write函数
ssize_t write(int fd, const void *buf, size_t count);
功能:将buf里的数据写到文件fd中,大小为count字节
参数:
fd:要写入的文件的文件描述符
buf:发送数据的缓冲区
count:写入的字节数, count不应超过buf大小
返回值:
成功返回实际写入的字节数;出错时返回EOF
五、lseek函数
off_t lseek(int fd, off_t offset, int whence);
功能:改变文件当前的读写位置
参数:
whence:SEEK_SET SEEK_CUR SEEK_END(最后一个字符的下一个位置)
offset:偏移量,与whence相加
返回值:
成功时返回当前的文件读写位置;出错时返回EOF
六、ctags的创建
1、添加索引文件
在/usr/include 下执行
sudo ctags -R
执行完之后,会在当前目录生成一个tags文件
2、将命令全局化
在家目录下的.vimrc里面添加一句指令
set tags+=/usr/include/tags
ctags的使用:
使用ctrl + ] 追代码
使用ctrl + t 后退