linux——打开/创建文件

 创建文件需要包含以下3个头文件

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

打开、创建文件有以下3个API

open的返回值——文件描述符(索引作用),是一个小的非负整数

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

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

flags:权限:O_RDONLY只读打开, O_WRONLY只写打开, O_RDWR可读可写打开

当我们附带了权限后,打开的文件就只能按照这种权限来操作,以上3个常数中应当只指定1个。

下列常数是可选择的:

    O_CREAT若文件不存在则创建它。使用此选项时,需要同时说明第三个参数mode,用其说明该新文件的存取许可权限。

    O_EXCL如果同时指定了O_CREAT,而文件已存在,则出错。

    O_APPEND每次写时都加到文件的尾端。

    O_TRUNC属性去打开文件时,如果这个文件中本来时有内容的,而且为只读或只写成功打开,则将其长度截短为0.

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

代码实际演示:

1、创建1个demo1.c文件

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
int main()
{
        int fd;
        fd=open("./file1",O_RDWR);
        printf("fd=%d\n",fd);
        return 0;
}

编译运行输出fd=3,打开成功

第二次运行则fd=-1,表示打开失败

2、复制demo1.c为demo2.c

#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("./fail1",O_RDWR|O_CREAT,0600);
                if(fd>0){
                        printf("creat file1 succse\n");
                }
        }
        printf("fd=%d\n",fd);
        return 0;
}

编译运行,结果为

open file1 failed
creat file1 succse
fd=3
发送命令ls,能看到多了一个file1文件

a.out  demo1.c  demo2.c  fail1
 

ls -l(把所有文件清单列出)

-rwxr-xr-x 1 CLC book 8479 Apr  4 17:25 a.out
-rw-r--r-- 1 CLC book  169 Apr  4 17:07 demo1.c
-rw-r--r-- 1 CLC book  310 Apr  4 17:25 demo2.c
-rw------- 1 CLC book    0 Apr  4 17:25 fail1
-为普通文件,r为可读权限,w为可写权限,x为可执行权限

看fail1,为可读可写文件

文件权限一般分为3种:可读、可写、可执行

结合代码中mode=0600看:6=4+2(代表可读可写)

4为可读(r),2为可写(w),1为可执行(1)

0600,倒数第一位代表其他组,倒数第二位代表同组,倒数第三位是给文件所有者的权限

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值