首页 > 代码库 > linux下C++开发系列(六)——文件IO相关的系统调用
linux下C++开发系列(六)——文件IO相关的系统调用
linux操作系统中,文件是最基本和最重要的抽象,linux遵循一切皆文件的理念。按照不同的属性,文件可以分为普通文件和特殊文件。特殊文件是以文件方式表示的内核对象,linux支持四种类型的特殊文件:
1、块设备文件 (例如硬盘设备)
2、字符设备文件(例如键盘设备)
3、命名管道 (主要是进程间通信使用)
4、Unix域套接字(主要是网络通信使用)
linux系统对于文件的操作,提供了一系列的系统调用个,主要分为以下几类:
1、创建文件(creat) 2、打开文件(open) 3、读文件(read) 4、写文件(write) 5、同步IO(fsync)
6、直接IO 7、关闭文件(close) 8、查找文件(lseek) 9、定位文件(pread/pwrite) 10、截短文件(truncate)
下面具体介绍几个常用调用用法:
1、creat 创建文件,系统调用的原型为:
#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h> int creat(const char *pathname, mode_t mode);
creat使用比较少,因为所有的创建文件的功能,都可以通过open系统调用来实现,creat本身也可以通过open来实现,为何还存在这样一个系统调用,这是一个历史遗留问题,因为Unix一开始设计时,open系统调用只有两个参数,不足以完成创建文件的功能,所以就有了creat系统调用,但是后来open系统调用扩展了三个参数,就把creat的功能实现了,但是creat系统调用还是遗留了下来,creat并不是一个单词,少了字母e,这是Unix开发者写代码的时候,漏掉了一个字母导致了,看大神也有不小心的时候,大家写代码的时候,要认真。
2、open 打开和创建文件,系统调用的原型为
#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open (const char *name, int flags);int open (const char *name, int flags, mode_t mode);
name 代表传入的文件名。
flags的枚举:O_RDONLY(只读) O_WRONLY(只写) O_RDWR(读写)
#include <unistd.h>ssize_t read(int fd, void *buf, size_t count);
fd 代表open成功返回的文件描述符,也是要读取数据的文件
buf存储从文件中读取的数据
count 代表从文件中读书的数量
返回值:如果读取成功,返回读取到的数据量,如果失败,返回-1,并且设置errno
4、write原型
#include <unistd.h>ssize_t write (int fd, const void *buf, size_t count);
fd代表open成功返回的文件描述符,也是要写入数据的文件
buf 存储要写入的数据
count 代表写入的数量
返回值:如果写入成功,返回写入的数据量,如果师表,返回-1,并设置errno
5、同步IO(fsync)
fsync是最简单的确认数据写入磁盘的方法,函数的原型为:
#include <unistd.h>int fsync (int fd);
6、直接IO
linux下C++开发系列(六)——文件IO相关的系统调用