`

重定向和管道的实现

阅读更多
重定向标准输入的实现:
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调用。
分享到:
评论

相关推荐

    Linux实验八:LinuxC-编程-IO-重定向和管道.doc

    通过这些实验,你可以深入理解Linux系统中I/O重定向和管道的工作原理,以及如何在C程序中实现它们。这些基础知识对于系统级编程和shell脚本编写非常重要,因为它们允许我们灵活地控制程序的输入输出,以及在不同进程...

    标准IO重定向和管道

    ### 标准IO重定向和管道 #### 一、标准输入和输出 在Linux系统中,每一个程序都具有默认的标准输入、标准输出以及标准错误输出。这些标准输入输出设备是程序与用户交互的重要方式。 - **标准输入(STDIN)**:默认...

    Linux操作之输入输出重定向和管道

    ### Linux操作之输入输出重定向和管道 #### 标准输入输出与错误处理 在Linux或Unix环境下,标准输入(`stdin`)、标准输出(`stdout`)以及标准错误输出(`stderr`)是非常重要的概念。这三个流通常与控制终端关联...

    linux重定向和管道符

    在Linux操作系统中,重定向和管道符是两个非常重要的概念,它们极大地增强了命令行界面的灵活性和功能性。让我们深入探讨这两个主题。 **一、标准输入输出** 在Linux中,每个命令或程序都有三个标准流:标准输入...

    重定向和管道、信号1

    在Linux操作系统中,重定向和管道是两种非常重要的I/O操作,它们允许用户或程序将标准输入、输出和错误流导向不同的位置,如文件、设备或者另一个程序的输入。同时,信号是进程间通信的一种机制,用于通知进程发生了...

    基于C++实现的Linux的 Shell 程序+项目开发文档,实现基本的命令执行功能,支持 I/O 重定向和管道操作

    本项目旨在开发一个用于 Linux 的 Shell 程序,利用 C++ 标准库和 Linux 系统调用来实现。该 Shell 程序提供了基本的命令执行功能,支持 I/O 重定向和管道操作,并实现了一些内置命令

    ch5 进程、重定向和管道1

    【进程概念】 进程是操作系统资源分配的...此外,还讲解了标准文件、重定向和管道的使用,这些都是在Linux环境中进行有效命令行操作的关键技术。通过学习这些知识点,用户可以更深入地理解和控制Linux系统的运行行为。

    匿名管道实现控制台重定向

    在本例中,“匿名管道实现控制台重定向”是指将控制台输出(如命令行程序的打印信息)通过匿名管道导向到其他地方,例如另一个进程或文件。这里我们使用了`PING`命令作为示例,`PING`是一个常用的网络诊断工具,用于...

    vim编辑器中掌握输入输出重定向与管道命令的应用

    在Linux世界中,掌握输入输出重定向和管道命令是提高命令行操作效率的关键。vim编辑器虽然不直接涉及这些操作,但在使用vim之外的shell环境中,它们是非常实用的工具。 输入输出重定向允许我们将命令的输入和输出从...

    cmd中的重定向输出,管道

    管道操作可以与其他重定向操作结合使用,以实现更复杂的数据处理流程。例如,下面的命令先使用`dir`命令列出所有文件,然后通过`find`命令筛选出包含特定字符串的文件,最后将结果保存到文件中: ```cmd dir /b | ...

    管道与IO重定向 计算机操作系统 Linux Ubuntu

    在实验中,我们将学习如何使用Linux的I/O重定向和管道操作来完成单个命令不能实现的复杂任务。下面是实验的详细步骤: 1. 使用`cat`命令创建一个名字为`test.data`的文件,并显示文件的内容。 使用`cat`命令可以...

    北邮linux开发环境实验报告

    在本实验报告中,我们将深入探讨“北邮Linux开发环境”的相关知识,特别是Shell管道(Pipe)和重定向(Redirection)功能的实现,以及如何利用这些工具生成TCP活动状况报告。这一实验属于北京邮电大学计算机科学与...

    易语言重定向管道输入输出

    易语言通过管道实现的cmd重定向输入和输出功能

    cmd匿名管道重定向工程

    标题中的“cmd匿名管道重定向工程”涉及到的是在Windows操作系统环境下,使用C++编程语言实现的命令行(cmd)进程间通信(IPC)的一种技术。在这个工程中,开发者利用匿名管道来实现不同进程间的通信,通常是为了...

    匿名管道重定向cmd

    总的来说,理解如何在CMD中使用匿名管道和重定向是深入掌握系统级编程和进程间通信的基础,对于新手来说,这是一个很好的学习起点。通过实践,你可以更好地掌握这一技能,并逐步扩展到更复杂的系统设计。

    操作系统实验作业——linux系统调用学习,重定向、管道、多进程、多线程编程技术实现.zip

    重定向可以与管道结合使用,提高命令行操作的灵活性和效率。 3. 管道(Pipeline): 管道是一种机制,它允许我们将一个命令的输出作为另一个命令的输入。通过使用`|`符号,我们可以构建命令链,使得数据在多个命令...

    Delphi源代码:使用PipeRedirect管道重定向的实现.rar

    这个`Delphi源代码:使用PipeRedirect管道重定向的实现.rar`文件包含了一个示例程序,展示了如何在Delphi中使用管道(Pipes)来重定向`Cmd`控制台的输入和输出。 首先,理解管道(Pipes)的概念是至关重要的。管道...

    Linux与UNIX Shell编程指南

    6. **文件处理与I/O重定向**:学习如何读取、写入和追加文件,以及利用重定向和管道实现进程间通信。 7. **函数与别名**:掌握如何定义和调用Shell函数,以及创建别名以简化常用命令。 8. **Shell环境与配置**:...

    利用管道重定向cmd输入输出源码

    ### 利用管道重定向CMD输入输出的知识点详解 ...综上所述,通过API函数创建和使用管道来重定向CMD的输入输出是一项非常实用的技术,它不仅可以简化自动化任务的编写过程,还可以提高程序的性能和效率。

    UNIX Shells by Example, 3rd Edition

    4. 了解如何利用输入/输出重定向和管道实现数据处理和自动化任务。 5. 探索进程控制,如后台运行命令、信号处理和子进程管理。 6. 熟悉错误处理和调试技巧,以确保脚本的健壮性。 7. 获得对系统管理更深层次的理解,...

Global site tag (gtag.js) - Google Analytics