UNIXC01 文件操作 之 系统调用,文件权限

文件管理

在这里插入图片描述

open

在这里插入图片描述

  • 形参位置的那三个点叫可变参数, 这个参数有没有, 有多少个, 类型, 由前面的 flags 决定

在这里插入图片描述

函数的可变参数

在这里插入图片描述

  • 可以看出在printf函数中, 前面一个参数中有占位符%s, %d … 时, printf函数就需要第二个参数,第二个参数里的数量和类型取决于前面那个参数中有几个什么类型的占位符。

文件描述符

在这里插入图片描述

  • 进程每打开一个文件会再内核中产生一个struct file类型的对象,对象的地址会放在文件描述度表(指针数组)当中。对应下标就是这个新打开文件的文件描述符。
  • 一般会找到文件描述符表项这个指针数组里面第一个没有被使用的的元素, 把struct file类型的对象的地址放进去。

三个比较特殊的文件描述符

在这里插入图片描述

  • 只要是在bash上启动的进程, 默认都会有上面三个文件描述符
# ls直接显示在屏幕上的, 是通过标准输出的那个流输出到了屏幕
moonx@moonx:~ $ ls
anaconda2  apollo  Desktop  Documents  Downloads  examples.desktop  kill.sh  Music  nas.sh  Pictures  pstree.txt  Public  Sunlogin Files  SunloginRemote  Templates  Videos

# tls显示的内容是通过标准错误输出流输出到屏幕的
moonx@moonx:~ $ tls
No command 'tls' found, but there are 19 similar ones
tls: command not found

文件的类型

在这里插入图片描述

文件的权限

在这里插入图片描述

  • 一个用户可以在多个组里, 一个组里也可以有多个用户

在这里插入图片描述

  • 修改权限
moonx@moonx:~ $ mkdir uc_file
moonx@moonx:~ $ cd uc_file/
moonx@moonx:~/uc_file $ touch tt
moonx@moonx:~/uc_file $ ls -l
total 0
-rw-rw-r-- 1 moonx moonx 0 12月 10 19:39 tt
moonx@moonx:~/uc_file $ chmod 0644 tt
moonx@moonx:~/uc_file $ ls -l tt
-rw-r--r-- 1 moonx moonx 0 12月 10 19:39 tt
moonx@moonx:~/uc_file $ chmod 0755 tt
moonx@moonx:~/uc_file $ ls -l
total 0
-rwxr-xr-x 1 moonx moonx 0 12月 10 19:39 tt

  • 权限分为三组,还可以用另一种方式来修改权限
    选项:-R 表示当为目录的时候递归修改。即把该目录下的所有文件和目录一并修改
    对象:a 表示所有人;u 表示拥有者;g 表示所属组 ; o 表示其他人
    操作:+ 表示增加权限 ; - 表示减少权限
    权限 : r 读; w 写 ; x 执行
# 给所有人加上可执行权限
moonx@moonx:~/uc_file $ chmod a+x tt
moonx@moonx:~/uc_file $ ls -l
total 0
-rwxrwxr-x 1 moonx moonx 0 12月 10 19:39 tt
# 在拿走(变态)
moonx@moonx:~/uc_file $ chmod a-x tt
moonx@moonx:~/uc_file $ ls -l
total 0
-rw-rw-r-- 1 moonx moonx 0 12月 10 19:39 tt

进程的umask掩码

查看到当前进程的umask掩码

# 0002代表: 其他人, 写的那位为1,其他的都是0 (因为4代表读, 2代表写, 1代表可执行)
# 哪一位为1, 创建文件是就把相应的位拿掉, 直接拿掉写权限,(当我们创建一个文件的时候, 会自动把其他人的写权限屏蔽掉)
moonx@moonx:~/uc_file $ umask
0002
moonx@moonx:~/uc_file $ touch tt
moonx@moonx:~/uc_file $ ls -l
total 0
-rw-rw-r-- 1 moonx moonx 0 12月 10 20:01 tt #其他人的写权限被拿走了, 都没有x的原因是本来就不能有执行权限

#改变umask
# 0444代表: 拥有者, 所属组, 其他人的读权限全部被拿走
moonx@moonx:~/uc_file $ umask 0444
moonx@moonx:~/uc_file $ touch ty
moonx@moonx:~/uc_file $ ls -l
total 0
-rw-rw-r-- 1 moonx moonx 0 12月 10 20:01 tt
--w--w--w- 1 moonx moonx 0 12月 10 20:03 ty

# 0033代表:所属组, 其他人 的写和可执行权限(没有的可执行权限,拿也白拿)被拿走
moonx@moonx:~/uc_file $ umask 0033
moonx@moonx:~/uc_file $ touch tx
moonx@moonx:~/uc_file $ ls -l tx
-rw-r--r-- 1 moonx moonx 0 12月 10 20:07 tx

close

在这里插入图片描述

  • struct file类型的对象(files)的地址在文件描述符表里面,地址可以放在这个指针数组当中的一个元素里面, 也可以存到多个元素里面(因为文件可能被打开了多次)。 在struct file结构体里面有个值叫引用计数,它记录了指针数组里有哪几个元素指向struct file类型的对象(files)。
  • 如果文件描述符表这个指针数组中只有一个元素指向这个struct file类型的对象(struct file里的引用计数就是1),当关闭这个文件描述符时(上面那个元素的下标),说明没有人再用这个struct file对象, 就把struct file对象在内核中的内存释放了。
  • 如果文件描述符表这个指针数组中有三个元素指向这个struct file类型的对象(struct file里的引用计数就是3),当三个文件描述符都关闭时, 就把struct file对象在内核中的内存释放了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值