将文件处理作为参数

Getting file handle as an argument

本文关键字:参数 处理 文件      更新时间:2023-10-16

在bash重定向中,我问了一个问题,并得到了以下答案。

使用cat < filecat从其标准输入中读取;外壳打开文件并将文件句柄连接到cat

现在,我很好奇这是怎么可能的。我的意思是,程序(由C或C 这样实现(如何将文件处理作为参数。我知道只有字符(例如 char* argc[](作为参数。

它并没有真正将其作为参数(至少不是命令行参数(。

启动过程(在类似于Unix的系统上(时,它将打开三个标准流:标准输入,标准输出和标准误差。如果您不重定向,则标准输入将来自键盘,并且标准输出和标准错误都将转到屏幕(通过某些设备连接,例如在/dev中(。

当您重定向标准一个流(输入,输出或错误(时,壳将向该文件打开一个句柄,然后进行操作,将其设置为"为子女"的指定标准流所需的操作 - 在系统上它使用fork,它可以使用dup2将自己的标准句柄设置为指定的文件,然后将子过程分配,然后(在父母中(还原其标准流(这不是处理它的唯一可能的方法,只有一种可能性(。

<字符表示输入流从stdin重定向到file。该程序不会将文件句柄作为参数获取,但是stdin句柄被命令行中提供的file的句柄代替。请参阅Wikipedia上的重定向的描述

<file不是参数。

<(类似地, >>>|重定向符号,它们的行为直接嵌入bash(以及其他外壳(。

(。

重定向是指代替标准输入/输出(键盘和监视(程序读取/写入/到a file (<>>>(或 - 在|的情况下 - 左图的输出作为输入作为右程序。

(它假设相应的程序 - 在您的情况下为cat - 被编程为从标准输入/输出/输出。对于程序员而言,这是一种非常方便的方式,因为他/她不需要与文件及其处理程序有关。(