打开(open)
使用open函数需要包含以下三个头文件:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
open的函数定义格式
int open(const char *pathname,int flags);
int open(const char *pathname,int flags,mode_t mode);
函数定义的参数解读
1.pathname:指向文件的路径
指定文件格式:./文件夹名字/指定文件名字
当前文件格式:./当前文件名字
2.flags:文件权限(分为两种情况)
第一种:(只能选择并执行其中一个)
1、O_RDONLY 只读打开
2、O_WRONLY 只写打开
3、O_RDWR 可读可写打开
当我们附带了权限后,打开的文件就只能按照这种权限来操作。以上这三个常数中应当只指定一 个。
第二种:(可以选择多种同时进行)
注:在执行第二种时,其格式是与第一种并在一起,两者中间需要加一个 '|'
1.O_CREAT:若文件不存在则创建它,使用此选项时,需要同时说明第三个参数mode,用其说明该新文件的存取许可权限。示例:
fd = open("./file1",O_RDWR|O_CREAT,0600);//fd为open的文件描述符,如果没有该文件,则创建一个新的文件并打开
2.O_EXCL:如果同时指定了O_CREAT,而文件已经存在,则出错(返回-1)。示例:
fd=open("./file1",O_RDWR|O_CREAT|O_EXCL,0600);//fd为open返回的文件描述符,此时若已经存在file1,open返回-1
3.O_APPEND:每次写时都加到文件的尾端。
fd=open("./file1",O_RDWR|O_APPEND);//此时可将原file1文件里的信息先删除后写入
4.O_TRUNC属性去打开文件时,如果这个文件中本来是有内容的,而且为只读或只写成功打开,则将其长度截短为0。
fd=open("./file1",O_RDWR|O_TRUNC);//此时可将原file1文件里的信息先删除后写入
3.mode
mode是文件的创建模式,其执行功能有5种,分别是:
可执行:0100
可写:0200
可读:0400
可读、写:0600
可读、可写、可执行:0700
读的符号是r,数值为4;写的符号是w,数值为2;执行的符号是x,数值为1。其中共有4位数,而mode的创建模式执行的功能取决于第2位的数值(几种数值本身的数或者和)。对0600解析即:文件的所有者(用户)对文件file1的权限。
注:mode一定是在flags中使用了O CREAT标志,mode记录待创建的文件的访问权限。
文件描述符
执行一个程序时可能会打开很多文件,而对多个文件的操作需要进行区别,我们需要指定某个文件进行指定操作,这个时候就需要一个区分标志来辨别,即文件描述符。当一个文件被打开时,系统会产生一个结构体来储存文件中的各种信息,此时文件描述符指向这些信息。同时open函数的返回值就是一个文件描述符,其返回值是一个较小的非负整数。
代码展示
文件存在:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
int main()
{
int fd;//定义一个文件描述符
fd = open("./file1",O_RDWR);//open函数的返回值给文件描述符
printf("fd = %d\n",fd);//输出文件描述符的值
return 0;
}
文件不存在:
创建(creat)
与open函数一样需包含以下三个头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
creat的函数定义格式
int creat(const char *pathname,mode_t mode);
与open函数一样,返回值也是文字描述符。返回值也是一个较小的非负整数。
函数定义的参数解读
1.pathname:指向文件的路径
2.mode
mode是文件的创建模式,这里与open函数的mode有区别,这里的创建模式为系统自带。
可执行:S_IXUSR
可写:S_IWUSRL
可读:S_IRUSR
可读、可写、可执行:S_IRWXU
代码展示
结合open函数:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
int main()
{
int fd;
fd = open("./file1",O_RDWR);//此时文件已经不存在
if(fd == -1)//文件不存在输出小于零的负数
{
printf("open file1 failed\n");//提示文件打开失败
fd = open("./file1",O_RDWR|O_CREAT,0600);//创建一个可读可写可执行的文件
if(fd > 0)//输出非负整数
{
printf("creat file1 success\n");//提示创建成功并打开
}
}
return 0;
}