/*
*
在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)权限。文件的所有者、所属组和其他用户分别有这三种权限的组合。
文件权限表示方式
文件权限可以使用三种方式表示:
-
符号表示法:
r
表示读权限w
表示写权限x
表示执行权限-
表示无相应权限
例如,
rw-r--r--
表示文件的所有者有读写权限,所属组和其他用户只有读权限。 -
数字表示法:
r
被表示为 4w
被表示为 2x
被表示为 1-
被表示为 0
每组权限的三个位可以通过将相应的数字相加得到,例如,
rw-r--r--
可以表示为 644。 -
八进制表示法:
r
被表示为 4w
被表示为 2x
被表示为 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