当前位置: 代码网 > 服务器>服务器>Linux > linux open函数用法详解 如何打开或创建文件并设置权限

linux open函数用法详解 如何打开或创建文件并设置权限

2026年08月25日 Linux 我要评论
open函数函数介绍在linux中open()函数用来打开或创建一个文件,当打开文件失败时返回值为-1;成功则返回作为文件描述符(一个非负的数值)。头文件及函数原型#include <sys/t

open函数

函数介绍

在linux中open()函数用来打开或创建一个文件,当打开文件失败时返回值为-1;成功则返回作为文件描述符(一个非负的数值)。

头文件及函数原型

#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);//打开或创建文件,并给文件赋权限 

参数

open()函数参数
pathname打开的文件名或路径,路径用绝对路径
flag      标志作用
o_rdonly只读方式打开文件
o_wdonly只写方式打开文件
o_rdwr读写方式打开文件
非阻塞方式打开文件
o_creat文件不存在就创建
o_excl与o_creat一起使用,判断文件是否存在。文件存在返回错误信息,
o_noctty
o_trunc文件清0,若文件存在则文件内的内容将被清空
o_append添加方式打开文件,打开文件时,文件指针指向文件末尾,将写入数据添加到文末
同步方式写入文件
提供同步的i/o数据完整性
i/o操作可行,产生信号通知进程
无缓冲输入输出
若不是目录,则失败
modes_iruser | s_iwusr

设置文件所有者可读可写(即0600)

第一位数字0代表特殊权限(suid:4、sgid:2、sbit:1),不是八进制的意思。一般将其设置为0,即系统默认。

一组宏定义:s_i(r/wx)(usr/grp/oth)

r(4):读        w(2):写        x(1):可执行

usr:文件所有者

grp:文件所属组

oth:其他所有者

在给文件赋权限时,在open函数中给的权限并不是文件真正的权限,还要与文件本地的掩码按位与之后的结果才是其真正的权限。通过umask可以获取本地的掩码或者修改本地的掩码。

其过程如下图所示。

修改本地俺码

umask 0023     //把本地的掩码修改成0023
/****************
 *其中后面三个数字分别代表文件的所有者、所属组、其他用户的权限;
 *通过设置数字表示取消该用户对文件的权限;上述的2和3分别表示取消了
 *用户所属组的写权限和其他用户对该文件写和执行权限。
*****************/

文件实际权限求法

close函数

函数介绍

close()顾名思义就是关闭文件,一般与open()函数一起使用。

每当打开、读写文件完成后都要使用close函数关闭文件。

头文件函数原型

#include <unistd.h>
int close(int fd); //参数fd为文件描述符

open()、close()函数使用

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>    //前三个是open函数头文件
#include <unistd.h>    //close头文件
#include <stdio.h>    //perror头文件
#include <stdlib.h>    //exit头文件

int main(){
        int fd;
        //定义一个文件描述符变量
        //打开文件
        //fd = open("hello.c",o_rdwr);        //打开文件,若该文件没有则报错
        //fd = open("hello.c",o_rdwr|o_creat,0777);    //打开文件,没有则创建并给文件赋权限
        //fd = open("hello.c",o_rdwr |o_creat | o_excl,0777 );
        //参数o_excl用来判断文件是否存在,其必须与o_creat一起使用才能判断文件是否村在
        //o_trunc将文件截断为零,即清空文件内容
        fd = open("hello.c",o_rdwr |o_creat | o_trunc,0777 );
        //打开文件失败
        if (fd== -1){
           perror("open file error");
           //通过errno函数的返回值,perror把提示信息和错误信息一起输出
           exit(1);
        }
        printf("create %d success!\n",fd);
        close(fd);    //关闭文件,fd为open函数返回的文件描述符
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com