文件描述符就是内核为了高效管理这些已经被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符来实现。同时还规定系统刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误。这意味着如果此时去打开一个新的文件,它的文件描述符会是3,再打开一个文件文件描述符就是4......
STDIN_FILENO(标准输入)、 STDOUT_FILENO(标准输出)、STDERR_FILENO(标准错误)
流:建立在文件描述符之上。流操作函数都是C的标准库函数;特定文件流: stdin、stdout、stderr
Linux中文件的普通权限一般为:rwx,对应与数字表示:421;
linux文件的三种特殊权限分别是:suid权限、sgid权限、sticky权限;其中suid权限作用于文件属主,sgid权限作用于属组上,sticky权限作用于other其他上。
suid权限:
让普通用户临时拥有该文件的属主的执行权限,suid权限只能应用在二进制可执行文件(命令)上,而且suid权限只能设置在属主位置上。
suid权限使用s表示,增加权限u+s,移除权限u-s;0表示去除suid权限,4表示添加suid权限,而且是在原权限的数字表达形式开头加0或4,如:0755移除suid权限,4755添加suid权限。
//解释了关于passwd命令的实现,尽管无法打开/etc/shadow但是还是可修改自己用户密码;
sgid权限
sgid权限一般应用在目录上,当一个目录拥有sgid权限时,任何用户在该目录下创建的文件的属组都会继承该目录的属组。
sgid权限也使用s表示,增加权限g+s,移除权限g-s;
sgid权限也可以使用数字形式表示,0表示去除sgid权限,2表示添加sgid权限,而且是在原权限的数字表达形式开头加0或2,如:0755移除sgid权限,2755添加sgid权限。
sticky权限
作用:sticky权限一般针对目录来设置,作用是只允该目录下的文件的创建者删除自己的创建的文件,不允许其他人删除文件。(root用户除外,因为root用户是超级管理员),而且sticky权限只能设置在other位置上。sticky权限使用t表示,增加权限o+t,移除权限o-t;
sticky权限也可以使用数字形式表示,0表示去除权限,1表示添加权限,而且是在原权限的数字表达形式开头加0或1,如下:如:0755移除sticky权限,1755添加sticky权限。
Linux中文件特殊权限suid、sgid、sticky(有图详细讲解)-CSDN博客
链接作用
为解决文件的共享使用,Linux 系统引入了两种链接:硬链接与软链接(又称符号链接)。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。
由于linux下的文件是通过索引节点(Inode)来识别文件,硬链接可以认为是一个指针,指向文件索引节点的指针,系统并不为它重新分配inode。每添加一个一个硬链接,文件的链接数就加1。硬连接之间没有主次之分,删除某个硬链接,只是将其从目录的数据块中删除相关信息,并且文件链接数减一。不会从inode表中删除inode,除非只剩下一个链接数。
软链接与硬链接 详细讲解_硬链接和软连接的特点-CSDN博客
open/read/write/close实现文件内容复制
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main() {
// 1. 通过open打开english.txt文件,只读
int srcfd = open("english.txt", O_RDONLY);
if(srcfd == -1) {
perror("open");
return -1;
}
// 2. 创建一个新的文件(拷贝文件),只写
int destfd = open("cpy.txt", O_WRONLY | O_CREAT, 0664);
if(destfd == -1) {
perror("open");
return -1;
}
// 3. 频繁的读写操作
// 创建缓冲区
char buf[1024] = {0};
int len = 0;
while(( len = read(srcfd, buf, sizeof(buf)) ) > 0 ) {
// 每读一次数据,就写入到拷贝文件中
write(destfd, buf, len);
}
// 4. 关闭文件
close(srcfd);
close(destfd);
return 0;
}
终端设备
终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。