Linux下面的文件读写操作方式

在Linux里面有三种方式可以读写文件,分别是系统调用、C语言文件操作、c++方式文件操作。下面我们来分别看看这三种方式的操作:

1、系统调用:

#include 
#include 
#include 

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

int creat(const char *pathname, mode_t mode);

O_RDONLY,以只读打开文件
O_WRONLY, 以只写打开文件
O_RDWR.以可读可写打开文件
O_EXEC 以只执行打开文件
O_SEARCH 只搜索打开(应用目录)
常量的目的是在目录打开的时候验证它的搜索权限。对目录的群文件描述符的后续操作就不需要再次检查对该目录的搜索权限。(部分操作系统支持)
以上五个常量中必须要指定一个,下面的常量是可选的
O_APPEND 打开文件并在文件尾端增加。
O_CREAT 若文件不存在则创建文件,mode参数为创建的文件有哪些权限(rwx)
O_EXCL 只有陪同O_CREAT,有用,如果文件存在报错,不存在则创建文件
。。。其他常量基本用不到,这几个是通常要用到的常量选项。
下面我们来看看open系统调用的使用:
这里以读写、文件不存在是创建、在文件尾部增加来打开文件的:
这里写图片描述
Linux下面的文件读写操作方式_第1张图片
运行代码:
Linux下面的文件读写操作方式_第2张图片
如果增加常量选项O_EXCL,因为文件存在而报错:
Linux下面的文件读写操作方式_第3张图片
Linux下面的文件读写操作方式_第4张图片
如果加了常量O_TRUNC选项,文件存在,而且是只读或者读-写的方式成功打开,将会把文件长度截断为0:
Linux下面的文件读写操作方式_第5张图片

Linux下面的文件读写操作方式_第6张图片
这里因为是先进性的读文件,原来文件里的记录都被O_TRUNC这个常量截为0,读不到数据,” world!”是最新写入的。
还有一个函数专门用来创建文件的:

#include
int creat(const char *path, mode_t mode);//成功返回文件描述符,失败返回-1
int open(path, O_WRONLY | O_CREAT|O_TRUNC, mode);
//二者等价

Linux下面的文件读写操作方式_第7张图片
执行结果:
Linux下面的文件读写操作方式_第8张图片

2、C语言文件读写操作:

#include 

FILE *fopen(const char *path, const char *mode);
FILE *fdopen(int fd, const char *mode);
FILE *freopen(const char *path, const char *mode, FILE *stream);

上面三者都是打开文件的函数,他们分别的功能是:
(1)fopen函数打开路径名为path的一个指定文件。
(2)freopen函数在一个指定的文件流上打开一个指定的文件,如果文件流是打开的,则先关闭文件流。若该流已经定向,则使用freopen清除定向。此函数一般用于将一个指定的文件打开为一个预定义的流:标准输入、标准输出、标准错误输出。该函数的简单使用在博客:http://blog.csdn.net/magiclyj/article/details/75677536 .
(3)fdopen函数取一个已有的文件描述符,并使一个标准的I/O流与该描述符相结合。该函数经常用于由创建管道和网络通信函数返回的描述符,因为这些特殊的类型的文件不能用标准I/O函数fopen打开,所以我们必须先调用设备专用函数以获得一个文件描述符,然后使用fdopen使一个标准I/O流与该文件描述符相结合。
三个函数的mode选项:
r和rb :以只读的方式打开文件,前提文件先存在。
w和wb:以只写的方式打开文件,文件不存在创建文件,文件存在会先清除文件内容从文件开始位置写数据。
a和ab:追加,在文件尾部写写而打开,或者为写而创建文件
r+和rb+和r+b:为读和写打开文件
w+和wb+和r+b:把文件截断置0长,或为读和写而打开
a+和ab+和a+b:在文件尾部读和写而打开或者创建

如果以和写打开文件的时候,有以下限制:
~如果中间没有fflush、fseek、fsetpos、rewind,则在输出的后面不能直接跟着输入。
~如果中间没有fseek、fsetpos、rewind,或者一个输入操作没有到达文件尾端,则再输入操作之后不能跟随输出。

下面我们来看看C语言的文件操作:
Linux下面的文件读写操作方式_第9张图片
执行结果:
Linux下面的文件读写操作方式_第10张图片

3、c++的文件读写:

#include   
ofstream         //文件写操作 内存写入存储设备   
ifstream         //文件读操作,存储设备读区到内存中  
fstream          //读写操作,对打开的文件可进行读写操作 

写文件:
Linux下面的文件读写操作方式_第11张图片
执行结果:
Linux下面的文件读写操作方式_第12张图片
读文件:
Linux下面的文件读写操作方式_第13张图片
执行结果:
Linux下面的文件读写操作方式_第14张图片

你可能感兴趣的:(Linux,c++,C语言)