IO相关的

什么是文件描述符,你是怎么理解的

文件描述符其实是一个指针数组的下标,每个进程都有独自的进程控制块task_struct,这里面有个指针指向一个files_struct,这个结构体里面有一个指针数组fd_array,这个指针数组的下标就是文件描述符,数组的每个元素指向一个struct_file,struct_file存储的是文件的信息,通过双链表组织起来的。

Linux系统下默认打开三个文件,分别是标准输入,标准输出,标准错误,它们的文件描述符分别是0,1,2。文件描述符是从最小但是没有被使用的fd_array数组下标开始进行分配的。

打开文件时,先把文件加载到内存,然后形成struct_file放入双链表里,把这个struct_file的地址填入fd_array下标为3的位置,最后返回文件描述符

文件描述符怎么分配的

文件描述符是从最小但是没有被使用的fd_array数组下标开始进行分配的。

Linux系统的文件io函数有什么,怎么使用

open函数,打开文件返回文件描述符

cpp 复制代码
int open(const char *pathname, int flags, mode_t mode);

pathname:文件名或者路径

flags:文件打开的方式,只读,只写。。。。

mode:文件权限,注意掩码

cpp 复制代码
int close(int fd);
cpp 复制代码
ssize_t write(int fd, const void *buf, size_t count);
cpp 复制代码
ssize_t read(int fd, void *buf, size_t count);

重定向的原理

原理就是修改文件描述符表中的指向,本来指向一个文件的,重定向之后,指向了另一个文件,其底层调用了dup2,来实现重定向

比如 ls > log.txt

本来是输出到屏幕的,重定向后输出到文件里了

其实就是调用dup2,把重定向文件的文件描述符的指针拷贝到1号描述符里,使得本来标准输出1号文件描述符指向显示器文件的,现在指向log文件了

dup2的原理

cpp 复制代码
int dup2(int oldfd, int newfd);

把文件描述符表里oldfd的内容拷贝到newfd里,这样使得newfd的指向发生改变了

标注输出和标准错误的区别

  • 文件描述符不同,标准输出是1,标准错误是2
  • 普通重定向对标准输出有用,标准错误没有用,标准错误要有特定的方式,比如 2 > log.txt
  • 缓冲机制不同,标准输出有行缓冲和全缓冲,标准错误没有

软硬链接的区别和使用场景

区别:

本质:硬链接是给原文件的inode新增一个文件名映射,同一个文件多个文件名。软连接是建立一个新的文件,文件内容是路径

inode号:硬链接是与原文件共享的。软连接是重新建立一个

连接对象:硬链接只能是文件,软连接可以是文件也可以是目录

删除操作:原文件删除之后不会影响硬链接。而对应软连接会导致连接失效

使用场景:

硬连接:

  • 用于文件备份
  • 不同目录下使用同一个文件,可以不用复制,使用硬链接,节省磁盘空间

软连接:

快捷方式:把长路径变成短路径

跨区访问时

相关推荐
xiaokcehui1 小时前
地球物理大地测量学计算系列之十七局部重力场SRBF逼近及其性能指标测评
人工智能·算法·机器学习
雪碧聊技术1 小时前
KMP算法详解
数据结构
Navigator_Z1 小时前
LeetCode //C - 1221. Split a String in Balanced Strings
c语言·算法·leetcode
天疆说1 小时前
庞特里亚金极小值原理的详细推导
算法
余俊晖2 小时前
Self-OPD:去掉教师机的流匹配模型 On-Policy 蒸馏
人工智能·算法·机器学习
手写码匠2 小时前
华为云Flexus+DeepSeek征文|华为云MaaS DeepSeek推理服务 × Flexus云服务器 × Dify一键部署:性能评测实战
人工智能·深度学习·算法·aigc
啥都想学点的研究生3 小时前
一篇文章讲清楚:逻辑回归
算法·机器学习·逻辑回归
货拉拉技术4 小时前
Agent 场景下 Token 成本优化的实战技巧
算法
hahaha60164 小时前
HLS高层次综合设计技巧--循环merge和循环split
人工智能·算法·计算机视觉
JAI科研4 小时前
Deepseek Agent Harness教程(七) | Deepseek Harness不是一个内核加一堆插件
开发语言·人工智能·深度学习·算法·自然语言处理·transformer·vllm