linux函数代码操练----文件操作篇------01open()函数

文件操作的前提是打开文件,open函数就是打开文件的一个函数,下面进行open函数的代码操练

基础知识

open函数用来打开一个文件并且返回一个文件描述符,其函数原型有两个

①int open(const char* path,int oflags);
②int open(const char* path,int oflags,mode_t mode);

实验内容

①利用open打开一个文件
②文件打开方式的探究
③O_CREATE参数下文件权限的探究

1.打开一个名为test.txt的文件

#include<stdio.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
int main()
{
int ret;
ret=open("test.txt",O_RDONLY);
printf("%d\n",ret);
if(ret!=-1){
printf("open success!\n");
}
return 0;
}


上诉代码可以告诉我们
①实验open函数必须使用的头文件有
fcntl.h
sys/types.h
sys/stat.h
②open函数的第二个参数是打开方式,这里用的是只读方式打开,经过实验,不能对文件进行写操作。类似的打开方式有:
O_RDONLY 以只读的方式打开,文件不可进行写操作
O_WRONLY
O_RDWR
O_APPEND
O_TRUNC
O_CREATE
O_EXCL

2.打开方式的探究

①O_RDONLY

程序截图
linux函数代码操练----文件操作篇------01open()函数

运行截图
linux函数代码操练----文件操作篇------01open()函数
说明:
该程序用open函数打开一个名为test.txt的空文件,然后尝试使用write函数向文件中写入内容失败,而用read函数读取文件内容成功。实验说明了O_RDONLY方式打开文件只可以读取文件内容不能写入文件内容。


②O_WRONLY
程序截图
linux函数代码操练----文件操作篇------01open()函数
运行截图
linux函数代码操练----文件操作篇------01open()函数
说明:
该程序用open函数打开一个名为test.txt的空文件,然后尝试使用write函数向文件中写入内容成功,而用read函数读取文件内容失败。实验说明了O_WRONLY方式打开文件只可以写入文件内容不能读取文件内容。


③O_RDWR
程序截图:
linux函数代码操练----文件操作篇------01open()函数
运行截图:
linux函数代码操练----文件操作篇------01open()函数
说明:
该程序用open函数打开一个名为test.txt的空文件,然后尝试使用write函数向文件中写入内容成功,用read函数读取内容也成功。实验说明了O_RDWR方式打开文件既可以写入文件内容也可以读取文件内容。


④O_APPEND
代码1
linux函数代码操练----文件操作篇------01open()函数
运行结果
linux函数代码操练----文件操作篇------01open()函数
说明
程序使用open函数以可读可写的方式打开文件test.txt,然后写入1111,关闭文件重复操作写入2222,程序运行结束查看文件test.txt的内容发现文件内容为2222.这说明写入的内容发生了覆盖,造成这种结果的原因是文件每次默认从开始位置写入内容。
下面使用O_APPEND函数进行操作
程序截图
linux函数代码操练----文件操作篇------01open()函数
运行结果
linux函数代码操练----文件操作篇------01open()函数
说明
使用O_APPEND打开文件并向其中写入内容,内容不会覆盖原来的内容而是接着文件尾写内容。注意O_APPEND单独作为参数无意义
⑤O_CREAT
程序截图
linux函数代码操练----文件操作篇------01open()函数
运行结果
linux函数代码操练----文件操作篇------01open()函数
说明
利用O_CREAT打开文件,文件不存在时则创建一个文件,注意O_CREAT单独使用时,如果文件已经存在则打开失败
⑥O_TRUNC
程序截图
linux函数代码操练----文件操作篇------01open()函数
运行结果
linux函数代码操练----文件操作篇------01open()函数
说明
使用O_TRUNC参数,文件打开后,内容被清空后再进行后面的操作。这里写图片描述

O_CREAT参数下文件权限的探究

程序截图
linux函数代码操练----文件操作篇------01open()函数
运行结果
linux函数代码操练----文件操作篇------01open()函数
说明
S_IWUSR 所有者写权限
S_IRUSR 所有者读权限
S_IXUSR 所有者执行权限

S_IWGRP 所有组写权限
S_IRGRP 所有组读权限
S_IXGRP 所有组执行权限

S_IWOTH 其他者写权限
S_IROTH其他者读权限
S_IXOTH其他者执行权限
如果想赋予文件多个权限使用或操作讲多个参数连接到一起

以上参数实际上是整数的宏定义,所以其实可以直接传入整数为文件一次性赋予多个权限。(实验待定)
“Linux总共用5个数字来表示文件的各种权限:

第一位表示设置用户ID;
第二位表示设置组ID;
第三位表示用户自己的权限位;
第四位表示组的权限;
第五位表示其他人的权限。
每个数字可以取1(执行权限)、2(写权限)、4(读权限)、0(无)或者是这些值的和。
例如,要创建一个用户可读、可写、可执行,其他用户无权限的文件可以传入
00700
程序截图
linux函数代码操练----文件操作篇------01open()函数
运行结果
linux函数代码操练----文件操作篇------01open()函数

写在后面
本函数的代码探究大概花了一个上午,包括自己写代码和查找资料,这既是一个探究的过程也是一个学习的过程,编程的很多东西只有经历过亲手实践才会有体会,关于博客中fail写出fild这个错误真的很失败,英语太烂了,见笑了各位读者。