重定向和管道的实现

简介:

重定向标准输入的实现:
1)close-then-open: close(0) ; fd=open("test",O_RDONLY); fd将是stdin。
2)open-close-dup-close:
fd=open(file),打开stdin将要重定向的文件;close(0);new_fd=dup(file);close(fd);new_fd就是被重定向的stdin
3)open-dup2-close:
fd=open(file);new_fd=dup2(fd,0);close(fd);

重定向标准输出的实现:
  父进程fork();子进程close(1);create("g",0644),此时子进程的stdout被重定向到g;接下来子进程exec某个程序,文件描述符属于进程属性,exec调用不会改变他们,那么运行的程序的标准输出将被送到g,由此实现了标准输出重定向。

本质上重定向的实现是依赖两个原则:
1、标准输入、标准输出和标准错误分别是0、1和2
2、最低可用描述符:打开文件时,为此文件安排的描述符总是进程内打开文件数组的最低可用位置的索引。

管道:
  匿名管道:适合于有亲缘关系的进程,通过pipe函数实现。
  有名管道:通过mkfifo函数实现,实现进程间的双向通讯可以采用两个有名管道实现,也可以采用socketpair调用。

文章转自庄周梦蝶  ,原文发布时间2008-02-29

目录
相关文章
|
3月前
重定向命令
重定向命令
20 0
|
3月前
|
网络协议 Shell
使用输入输出重定向与管道命令——重定向
使用输入输出重定向与管道命令——重定向。
20 0
|
3月前
|
Linux Shell
使用输入输出重定向与管道命令——管道
使用输入输出重定向与管道命令——管道。
21 0
|
5月前
|
Linux
基本指令(2):通配符,重定向,命令行管道
基本指令(2):通配符,重定向,命令行管道
|
Shell Linux 开发工具
Shell的基本信息、重定向与管道符
Shell的基本信息、重定向与管道符
115 0
Shell的基本信息、重定向与管道符
|
SQL 关系型数据库 MySQL
跟我一起学 Liunx 重定向和管道符
跟我一起学 Liunx 重定向和管道符
106 0
|
算法 网络协议 前端开发
重发和重定向有什么区别与重定向应用
重发和重定向有什么区别与重定向应用
174 0
重发和重定向有什么区别与重定向应用
|
Shell Linux 开发者
重定向和管道 | 学习笔记
快速学习重定向和管道。
117 0