一,打开/创建文件(open函数)

1.open函数作用

open函数在Linux下一般用来打开或者创建一个文件,我们可以根据参数来定制我们需要的文件的属性和用户权限等各种参数。

2.open函数的定义和参数

open函数在Linux下的定义

#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);

返回值

成功:新打开的文件描述符
失败:-1

3.参数说明

pathname:要打开的文件名(含路径,缺省为当前路径)

flags:
O_RDONLY:只读模式
O_WRONLY:只写模式
O_RDWR:可读可写

当我们附带了权限后,打开的文件就只能按照这种权限来操作。
以上三个常数中应只指定一个。下列常数是可选择的:
O_CREAT 表示如果指定文件不存在,则创建这个文件。
O_EXCL 表示如果要创建的文件已存在,则出错,同时返回 -1,并且修改 errno 的值。
O_APPEND 表示追加,如果原来文件里面有内容,则这次写入会写在文件的最末尾。
O_TRUNC 表示截断,如果文件存在,并且以只写、读写方式打开,则将其长度截断为0。

mode:一定是在flag中使用了O_CREAT标``志,mode记录待创建的文件的访问权限

4.测试代码

测试代码:
1.当前路径存在file1文件夹

#include <sys/types.h>                                                                                 
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
int main()
{

        int fd; 
    

 fd= open("./file1",O_RDWR);//file1当前路径下创建的file1文件夹

 printf("fd=%d\n",fd);


return 0;
}

结果



结果

tianya@tianya-virtual-machine:~$ gcc demo1.c 
tianya@tianya-virtual-machine:~$ ./a.out 
fd=3

2.当前文件夹不存在文件夹file2

#include <sys/types.h>                                                                                 
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
int main()
{

        int fd; 
    

 fd= open("./file2",O_RDWR);

 printf("fd=%d\n",fd);


return 0;
}

执行结果

tianya@tianya-virtual-machine:~$ gcc demo2.c 
tianya@tianya-virtual-machine:~$ ./a.out 
fd=-1

3.文件不存在时,创建文件
int open(const char *pathname, int flags, mode_t mode);

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
int main()
{

        int fd; 
            

 fd= open("./file2",O_RDWR);
if(fd==-1){
    printf("open files failed\n");
   fd=open("./file2",O_RDWR|O_CREAT,0600);//O_CREAT 表示如果指定文件不存在,则创建这个文件。   0600表示权限
   if(fd>0)
   {   
      printf("create filed sucesse!\n");                                                               
   
   }   


}
return 0;
}

执行结果(创建了file2文件)
在这里插入图片描述
补充说明(file2文件的0600权限):
1.查看权限
命令行输入

ls -l

结果
在这里插入图片描述
r–表示可读(4)
w–表示可写(2)
x–执行(1)
r+w = 6
-rw--------- 0600

Logo

更多推荐