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

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

1、系统调用:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

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系统调用的使用:
这里以读写、文件不存在是创建、在文件尾部增加来打开文件的:
在这里插入图片描述
在这里插入图片描述

运行代码:
这里写图片描述

如果增加常量选项O_EXCL,因为文件存在而报错:

在这里插入图片描述
在这里插入图片描述

如果加了常量O_TRUNC选项,文件存在,而且是只读或者读-写的方式成功打开,将会把文件长度截断为0:
这里写图片描述

这里写图片描述

这里因为是先进性的读文件,原来文件里的记录都被O_TRUNC这个常量截为0,读不到数据,” world!”是最新写入的。
还有一个函数专门用来创建文件的:

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

在这里插入图片描述

执行结果:
这里写图片描述

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

#include <stdio.h>

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语言的文件操作:
这里写图片描述

执行结果:
这里写图片描述

3、c++的文件读写:

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

写文件:
这里写图片描述

执行结果:
这里写图片描述

读文件:
这里写图片描述

执行结果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值