Linux学习(三)----文件打开及创建

1 demo1.c的建立

首先打开终端输入

touch file1

接着输入:

vi demo1.c

 接着重新打开一个终端,输入:

man 2 open

 2 demo1.c内容编辑

2.1 复制头文件

2.2 程序基础框架

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

int main()      
{


    return 0;
} 

2.3 open函数介绍

 该函数有两个函数原型,其实是参数的数量问题。

函数原型1:
int open(const char*pathname,int flags);

第一个参数是要打开的文件名,第二个参数是特殊常量,用于指定怎么打开文件。具体常量如下参数:
O_RDONLY: 只读打开
O_WRONLY: 只写打开
O_RDWR: 读,写打开
这三个常量,必须制定一个且只能指定一

 示例:

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

保存,接着执行程序

gcc demo1.c

./a.out

 执行结果如下:

 接着删除文件file1 ,输入如下:

rm file1   

./a.out

 运行结果如下:

 可以验证返回值:成功打开返回打开文件的文件描述符,是int类型,失败返回-1.

2.3 自动创建文件

若想实现文件不存在,自动创建文件则需要函数原型2,如下所示:

函数原型2:
int open(const char*pathname,int flags,mode_t mode);

O_CREAT: 若文件不存在,则创建它,需要使用mode选项。来指明新文件的访问权限
O_APPEND: 追加写,如果文件已经有内容,这次打开文件所写的数据附加到文件的末尾而不覆盖原来的内容

前两个参数与上相同,第三个参数是设定该文件的权限,具体参数如下

S_IRUSR    : 文件所有者有读(r)权限

S_IWUSR   : 文件所有者有写(w)权限

S_IRGRP   : 文件所属组有读(r)权限

S_IWGRP  : 文件所属组有写(w)权限

S_IROTH   : 文件所属other有读(r)权限

S_IWOTH  : 文件所属other有写(w)权限

总结:

权限主要分为如下三类:

1 可读:R ----4

2 可写:  W ----2

3 执行: X ----1

0600-给文件所有者可读可写权限

 示例,首先输入:

cp demo1.c demo2.c 

vi 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("./file1",O_RDWR|O_CREAT,0600);
        if(fd>0){
             printf("create file1 success\n");  
      
        }

    } 

    return 0;
}		

保存,输入:

gcc demo2.c

./a.out

 结果如下:

 

以上所述,如有错误,恳请各位大佬指正。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值