文件描述符与重定向
Posted 李憨憨_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件描述符与重定向相关的知识,希望对你有一定的参考价值。
文件描述符与重定向
一、文件描述符
1.文件描述符
文件描述符:系统调用IO接口的操作句柄--非负整数 文件描述符的本质:内核中进程打开的文件描述信息表中的下标;2.重定向原理
代码如下(示例):
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<fcntl.h>
int main()
{
int fd = open("test.txt", O_RDWR|O_CREAT, 0777);
if(fd < 0){
perror("open error");
return -1;
}
printf("fd=%d\\n", fd);
return 0;
}
此时的fd为3
如果我此时把1关掉
此时什么都没有打印,但当我们打开test.txt时,里面多了一行fd=1
一个进程中默认会打开三个文件:标准输入,标准输出,标准错误
标准输入文件 | 0 | stdin |
---|---|---|
标准输出文件 | 1 | stdout |
标准错误文件 | 2 | stderr |
3.分配规则
文件描述符分配规则:最小未使用
printf也属于标准输出,所以此时将数据写入了test.txt中
4.系统调用接口
让newfd从oldfd中拷贝文件描述信息地址,把newfd重定向到oldfd对应的文件上
基本使用:
dup2(fd, 1);//将标准输出重定向到test.txt
5.文件描述符与文件流指针
文件描述符:int,系统调用IO接口的操作句柄 文件流指针:FILE*,库函数调用IO接口的操作句柄 库函数与系统调用接口的关系:库函数封装了系统调用接口 通过库函数进行IO操作,最终是会归纳到使用系统调用接口完成IO操作通过库函数fopen打开一个文件所经历的事情:
库函数IO与系统调用IO的区别:
缓冲区:通常所说的那个换行刷新缓冲区的这个缓冲区,是文件流指针所有的,对于文件描述符或者系统调用来说,是没有的
文件流指针中的这个缓冲区被称之为用户态缓冲区
以上是关于文件描述符与重定向的主要内容,如果未能解决你的问题,请参考以下文章