C语言文件IO复习总结

这篇博客主要介绍了Linux操作系统中C语言的文件I/O操作,包括open函数的使用,如文件打开方式(只读、只写、读写)、文件存取权限,以及文件描述符、文件关闭和权限修改。通过示例展示了如何使用open、close和chmod函数,并强调了文件权限掩码umask的影响。

在Linux操作系统中,万物皆文件(everything is file),而今天进行复习的就是文件I/O,文件I/O基于POSIX标准,在进行文件I/O的过程中,每一次操作都会进行系统调用,增加大量系统开销,而我们后面讲到的标准I/O就大大弥补这一个缺陷。
首先我们从最基础的open函数开始:

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

pathname :文件名或者路径名。
flags:文件打开方式。
mode:文件存取权限。
下面我们一一的来说明这些参数:
文件名和路径名需要放在” “中,举个例子open(“hello.txt”)
一个文件有多个文件打开方式,这些flag参数可以通过”|”操作组合在一起,下面列出几个常见的flag参数:
O_RDONLY,O_WRONLY,O_RDWR,这三个参数不能相互组合。
O_RDONLY:表示以只读方式打开文件,类似于标准I/O中的”r”权限。
O_WRONLY:表示以只写方式打开文件,类似于标准I/O中的”w”权限。
O_RDWR:表示以读写方式打开文件,类似于标准I/O中的”r+”权限。
O_CREAT:表示如果打开文件不存在,就创建一个新文件。
O_EXCL:表示如果使用O_CREAT时目标文件存在,则返回错误信息。可以用于测试目标文件是否存在。
O_TRUNC:表示使用O_CREAT时文件已存在,清空文件中所有数据,并且在设置文件大小为1。
O_APPEND:表示使用O_CREAT时文件已存在,把要写入的数据添加进文尾(文件读写位置自动指向文尾)。
使用man手册可以查看剩下的flag参数,在这不做赘述。
mode是文件存储权限,可以用宏定义的方式表示,也可以用八进制的方法表示,类似0666,换成二进制就是:
|0110(文件所有者的权限)|0110(文件所在用户)|0110(其他用户)|
|w,r,x|w,r,x|w,r,x|
后三位代表着读w,写r和可执行权限x,所有权限都有就是0777。
注意,我们最后看到的文件权限还要再经过一道步骤,文件权限掩码,umask。
(mode & ~umask)这样子才是最后我们看到的文件权限,在Linux终端下输入umask查看当前文件掩码,一般是八进制0002。终端下输入umask+八进制数字可以修改,但是注意,这样修改的文件掩码只在该终端上修改,如果重启或者开其他终端,umask恢复初始值。
open函数成功返回文件描述符,失败返回-1。返回的文件描述付是int型。
close函数用于关闭一个已经打开的文件。一般我们在完成对文件操作后,添加close函数。
close(文件描述符);成功返回0,失败为-1。
下面介绍下如何在终端修改文件权限,使用chmod函数来修改

int chmod(const char *path, mode_t mode);

和open函数类似,第一个参数也是文件名,也可以是路径名,mode也和open函数中mode类似,可以用宏定义或者八进制的方式去写。
下面写一个简单的open函数:

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

int main(int argc,char *argv[])
{
        int fd;//文件描述符
        fd=open("test.txt",O_RDWR|O_CREAT|O_TRUNC,0666);
        //以读写,不存在就创建,存在就清空的方式打开test文件
        if(-1 == fd)
        {
            perror("open");
            exit(-1);
        }
        close(fd);//关闭文件描述符
        return 0;
}

写在最后:

这是我的第一篇博客,写的不好还望多多指正。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值