Dup 文件描述符复制|学习笔记

简介: 快速学习 Dup 文件描述符复制

开发者学堂课程【物联网开发- Linux 高级程序设计全套视频Dup 文件描述符复制】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/660/detail/11030


Dup 文件描述符复制

 

内容介绍:

一、文件描述符的复制

二、dup 函数

 

一、文件描述符的复制

dup和dup2是两个非常有用的系统调用,都是用来复制一个文件的描述符,使新的文件描述符也标识旧的文件描述符所标识的文件。

Int dup(int oldfd)——dup为所要复制的文件描述符,返回新的文件描述符和oldfd都标识同一个文件,即oldfd所标识的文件。即有两个文件符代表同一个文件符。

系统分配的文件符

Int dup2(int oldfd , int newfd)——个人指配的( oldfd与newfd都代表oldfd所代表的文件,返回值成功返回newfd,失败则返回负值)

dup 和 dup2经常用来重定向进程的stdin(标准输入)、stdout(标准输出)和stderr(标准错误输出)

回顾:Is>test.txt

重定向:

用到了dup和dup2的功能。本来输出到屏幕上,而输出到文件(text.txt)中,输出方向被改变。

image.gif1为默认标准输出文件(屏幕),3代表test.txt。只需要1不代表标准输出,代表test.txt

之后printf时默认在1代表的文件中写内容,则默认写入test.txt中。所以要想printf打印的东西不在屏幕上,只需让1代表别的文件。

 

二、dup 函数

#include

int dup(int oldfd)

1. 功能:

复制oldfd文件描述符,并分配一个新的文件描述符,新的文件描述符是调用进程文件描述符表中最小可用的文件描述符。

2. 参数:

要复制的文件描述符oldfd。

3. 返回值:

成功—新文件描述符

失败—返回-1,错误代码存于errno中

代码如下:

#include

#include

#include

#include

#include

int main(int argc, char *argv[])

{

int fd ,new_fd;

fd=open(“./test.txt”,O_RDWR);

if(fd<0)

{

perror(“open”);

return 0;

}

close(1);

new_fd = dup(fd);//复制文件描述符得到新的文件描述符,最小可用的为new_fd,为1从而实现重定向。

printf(“new_fd=%d\n”,new_fd);

printf(“hello world\n);

write(1,”hello kitty”,11);

return 0;

}

输出结果为:

hello kittynew fd=1

hello world

原因:“hello kitty”是用write写入的,没有缓冲。

printf打印的地方为缓冲区。先将write写到test.txt当中,然后输出new fd,再打hello world。

new fd为最小可用文件,来实现了重定向,用文件描述符复制实现重定向。

 

相关文章
|
6天前
|
算法 Unix Linux
select函数中的文件描述符(File Descriptor)范围
select函数中的文件描述符(File Descriptor)范围
18 0
select函数中的文件描述符(File Descriptor)范围
|
7月前
56 # 实现 pipe 方法进行拷贝
56 # 实现 pipe 方法进行拷贝
24 0
|
11月前
|
存储 Linux 开发工具
【Linux】基础IO(一) :文件描述符,文件流指针,重定向(下)
【Linux】基础IO(一) :文件描述符,文件流指针,重定向(下)
125 0
|
11月前
|
存储 Java Linux
【Linux】基础IO(一) :文件描述符,文件流指针,重定向(上)
【Linux】基础IO(一) :文件描述符,文件流指针,重定向
99 0
|
存储 Linux Shell
Linux系统调用十、进程地址空间、文件描述符、errno错误码、dup()重定向
Linux系统调用十、进程地址空间、文件描述符、errno错误码、dup()重定向
216 0
Linux系统调用十、进程地址空间、文件描述符、errno错误码、dup()重定向
系统编程之文件IO(六)——获取文件属性(stat、fstat、lstat、struct stat)
系统编程之文件IO(六)——获取文件属性(stat、fstat、lstat、struct stat)
105 0
系统编程之文件IO(六)——获取文件属性(stat、fstat、lstat、struct stat)
|
物联网 Linux 开发者
Dup2 文件描述符复制|学习笔记
快速学习 Dup2 文件描述符复制
47 0
|
物联网 Linux 开发者
复制文件描述符后新旧文件描述符特点|学习笔记
快速学习复制文件描述符后新旧文件描述符特点
99 0
|
Linux
使用LINUX dup2 复制文件描述符到标准输出STDOUT_FILENO
  7    8 #include   9 #include  10 #include  11 #include  12 #include  13 #include  14   15   16   17 int main(int argc...
1128 0
|
消息中间件 Unix C语言