linux的常用操作——open函数

1.linux系统函数

\qquad 使用linux系统函数和使用一般C库函数没有什么本质区别。在linux下编写c语言程序时,如果使用系统函数,也需要包含系统函数的头文件,函数也有参数,返回值,这和使用C库函数时的操作是一样的。

2.open函数

\qquad open函数,有两种类型,一种是两个参数;一种是三个参数。两个参数的open()函数适合于打开已经存在的函数;三个参数的open()函数适合于创建并打开一个不存在的文件。

2.1 open函数有两个参数时

\qquad open()函数的返回值:当返回-1时,发生错误;当返回文件描述符(不是-1)时,打开成功。
\qquad open()函数的两个参数:第一个参数:文件路径,需要用双引号把文件路径引起来;第二个参数:打开方式,有以下三种分别是,O_RDWR可读可写,O_RDONLY只读,O_WRONLY只写。
使用系统函数open()函数举例,open()需要包含三个头文件。
\qquad 当函数只有两个参数时,举例。

#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<errno.h>
#include<stdlib.h>
#include<unistd.h>
int main()
{
        int open_fd;
        int close_fd;
        open_fd = open("hello.txt",O_RDWR);
        if(open_fd==-1){
                perror("open fail!");
                exit(1);
        }
        else{
                printf("open success,文件描述符=%d\n",open_fd);
        }
        close_fd = close(open_fd);
        if(close_fd==-1){
                perror("close fail!");
                exit(1);
        }
        else if(close_fd==0){
                printf("close success\n");
        }
        return 0;
}

\qquad open()函数和close()函数是成对出现的,文件打开之后,在使用之后必须进行关闭。close()函数只有一个,并且只有一个参数。
\qquad close()函数的返回值:当关闭成功时,返回0;当关闭失败时,返回-1。
\qquad close()函数的参数:close()函数只有一个参数,即文件描述符,也就是open()函数打开成功之后的返回值。

2.2 open函数有三个参数时

\qquad 有三个参数的open()函数可以用于创建新文件。

\qquad 返回值:当返回-1时,发生错误;当返回文件描述符(不是-1)时,打开成功。

\qquad open()函数的三个参数:
\qquad \quad 第一个参数:文件路径,同上;
\qquad \quad 第二个参数:除了上述的O_RDWR可读可写,O_RDONLY只读,O_WRONLY只写外,还有 O_CLOEXEC, O_CREAT, O_DIRECTORY, O_EXCL, O_NOCTTY, O_NOFOLLOW, O_TMPFILEO_TRUNC。这里创建文件采用O_RDWR | O_CREAT
\qquad \quad 第三个参数:基于数字设置文件权限,实际的文件权限=本地掩码取反之后,与设置的文件权限进行按位与操作查看本地掩码命令:umask。我的本地掩码是:0002,二进制就是000 000 010,本地掩码取反就是111 111 101;设置的权限是777,二进制就是111 111 111,我们将两者按位与得到111 111 101,转换过来就是775,也就是rwx rwx r-x

\qquad 举例:

#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<errno.h>
#include<stdlib.h>
#include<unistd.h>

int main()
{
        int open_fd;
        int close_fd;
        open_fd = open("creat.txt",O_RDWR|O_CREAT,0777);
        if(open_fd==-1){
                perror("open fail!");
                exit(1);
        }
        else{
                printf("open syccess!\n");
        }
        close_fd = close(open_fd);
        if(close_fd==-1){
                perror("close fail");
                exit(1);
        }
        else if(close_fd==0){
                printf("close success!\n");
        }
        return 0;
}

\qquad 执行之后,果然生成一个空文件creat.txt,权限是rwx rwx r-x

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值