系统调用open函数

/*
 *
  在liunx中查看手册  man 2 open(这里的2是系统调用,3是标准c库)
  open函数的系统调用
  #include <sys/types.h>
  #include <sys/stat.h>
  #include <fcntl.h>

  函数声明,这里并不是函数重载(因为c没有)而是可变参数

  1. 打开一个已经存在的文件
  int open(const char *pathname, int flags);
        参数:-pathname:要打开的文件路径
             -flags: 对文件的操作权限设置以及其它设置
             The  argument  flags  must  include  one of the following access modes: O_RDONLY, O_WRONLY, or O_RDWR.
             These request opening the file read-only, write-only, or read/write, respectively.
        返回值:open(), openat(), and creat() return the new file descriptor,
                or -1 if an error occurred (in which case, errno is set appropriately).
        errno: 属于linux系统函数库,库里面的一个全局变量,记录的是最近的错误号

        man 3 perror查看
        #include <stdio.h>
        void perror(const char *s);
            s参数:用户描述,比如hello,最终输出的内容是 hello:xxx(实际的错误描述)
        作用是打印errno对应的错误描述


  2. 创建一个新的文件
  int open(const char *pathname, int flags, mode_t mode);
        参数:-pathname: 要创建的文件路径
             -flags: 对文件的权限和其它设置  -- 必选项 :O_RDONLY  O_WRONLY  O_RDWR  --可选项 :O_CREAT  如果文件不存在,创建新文件
                flags参数是一个int类型数据,占4个字节,32位。flags,每一位都是一个标志位
             -mode: 八进制的数,表示创建新文件的操作权限 比如0775   最终权限是:mode & umask
             普通用户的umask为0002 , umask的作用就是抹去某些权限

 */

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


int open1(){
    //打开一个已经存在的文件
    int fd = open("a.txt",O_RDONLY);
    if(fd == -1){
        perror("open");
    }
    // 关闭
    close(fd);
}
int open2(){
    //创建一个新的文件
    int fd = open("create.txt",O_RDWR|O_CREAT,0777);
    if(fd == -1){
        perror("open");
    }
    // 关闭
    close(fd);
}

int main(){
    open1();
    open2();
    return 0;
}

1. int open(const char *pathname, int flags);

  • pathname: 一个字符串,表示要打开的文件的路径和名称。
  • flags: 一个整数,用于指定打开文件的方式和选项。以下是一些常用的flags选项:
    • O_RDONLY: 只读方式打开文件。
    • O_WRONLY: 只写方式打开文件。
    • O_RDWR: 读写方式打开文件。
    • O_CREAT: 如果文件不存在,则创建文件。
    • O_TRUNC: 如果文件已存在,将其截断为空文件。
    • O_APPEND: 在每次写操作之前将文件位置设置到文件末尾。
  • 返回值:如果成功,返回一个非负的文件描述符(File Descriptor),可以用于后续的文件操作。如果失败,返回-1。

2. 

int open(const char *pathname, int flags, mode_t mode);

  • pathname: 一个字符串,表示要打开的文件的路径和名称。
  • flags: 一个整数,用于指定打开文件的方式和选项,与前一个函数相同。
  • mode: 一个八进制数,表示文件的权限(权限位),通常与O_CREAT一起使用。例如,0644表示文件的权限为rw-r--r--
  • 返回值:如果成功,返回一个非负的文件描述符,如果失败,返回-1。

在Linux系统中,文件和目录的权限是通过文件权限位(file permission bits)来控制的。每个文件或目录都有三组权限,分别对应文件的所有者(owner)、所属组(group)和其他用户(others)。这三组权限分别是读取(read)、写入(write)和执行(execute)权限。文件的所有者、所属组和其他用户分别有这三种权限的组合。

文件权限表示方式

文件权限可以使用三种方式表示:

  1. 符号表示法:

    • r 表示读权限
    • w 表示写权限
    • x 表示执行权限
    • - 表示无相应权限

    例如,rw-r--r-- 表示文件的所有者有读写权限,所属组和其他用户只有读权限。

  2. 数字表示法:

    • r 被表示为 4
    • w 被表示为 2
    • x 被表示为 1
    • - 被表示为 0

    每组权限的三个位可以通过将相应的数字相加得到,例如,rw-r--r-- 可以表示为 644。

  3. 八进制表示法:

    • r 被表示为 4
    • w 被表示为 2
    • x 被表示为 1

    以三个一组的方式,例如,rw-r--r-- 可以表示为 644。

一、使用 chmod 命令可以修改文件的权限

​
# 例:给文件所有者添加写权限
chmod u+w filename

# 例:给文件所属组添加执行权限
chmod g+x filename

# 例:给其他用户去掉读权限
chmod o-r filename

# 例:同时给文件所有者和所属组添加读写权限
chmod ug+rw filename

​

二、chown和chgrp命令

使用 chown 命令可以修改文件的所有者,使用 chgrp 命令可以修改文件的所属组。

# 例:将文件所有者修改为user
chown user filename

# 例:将文件所属组修改为group
chgrp group filename

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值