将文件处理作为参数
Getting file handle as an argument
在bash重定向中,我问了一个问题,并得到了以下答案。
使用
cat < file
,cat
从其标准输入中读取;外壳打开文件并将文件句柄连接到cat
现在,我很好奇这是怎么可能的。我的意思是,程序(由C或C 这样实现(如何将文件处理作为参数。我知道只有字符(例如 char* argc[]
(作为参数。
它并没有真正将其作为参数(至少不是命令行参数(。
启动过程(在类似于Unix的系统上(时,它将打开三个标准流:标准输入,标准输出和标准误差。如果您不重定向,则标准输入将来自键盘,并且标准输出和标准错误都将转到屏幕(通过某些设备连接,例如在/dev
中(。
当您重定向标准一个流(输入,输出或错误(时,壳将向该文件打开一个句柄,然后进行操作,将其设置为"为子女"的指定标准流所需的操作 - 在系统上它使用fork
,它可以使用dup2
将自己的标准句柄设置为指定的文件,然后将子过程分配,然后(在父母中(还原其标准流(这不是处理它的唯一可能的方法,只有一种可能性(。
<
字符表示输入流从stdin
重定向到file
。该程序不会将文件句柄作为参数获取,但是stdin
句柄被命令行中提供的file
的句柄代替。请参阅Wikipedia上的重定向的描述
<
和 file
是不是参数。
<
(类似地, >
, >>
和 |
是重定向符号,它们的行为直接嵌入bash
(以及其他外壳(。
重定向是指代替标准输入/输出(键盘和监视(程序读取/写入/到a file (<
,>
和>>
(或 - 在|
的情况下 - 左图的输出作为输入作为右程序。
(它假设相应的程序 - 在您的情况下为cat
- 被编程为从标准输入/输出/输出。对于程序员而言,这是一种非常方便的方式,因为他/她不需要与文件及其处理程序有关。(
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- 如何编写具有相同名称的相同函数,该函数在C++中几乎以相似的方式处理不同的类参数?
- 为什么这个噪声函数不处理否定参数?
- 容器如何处理 lambda 表达式的参数
- 处理一般情况混合类型和非类型的可变参数模板
- 如何在 c++ 窗口中将参数和返回的退出值传递到批处理文件/从批处理文件获取返回的退出值
- C++17.处理使用 auto 相关的模板参数.代码排序困难
- 使用qprocess将参数传递给批处理
- 专门处理一个参数(C++模板)的两个模板参数
- 编译器如何处理<Type> <Type> 具有多参数的向量initializer_list
- 当 C++ 中函数参数的输入类型(类)错误时的错误处理
- 在处理之前评估宏参数
- 如何处理C++98中不同类型的多个参数?
- 有没有办法帮助编译器处理复杂的参数推导?
- 如何处理模棱两可的模板参数
- 将不同类型的多种参数发送到处理方法的最佳方法.C
- 巩固大量参数处理的干净方法是什么
- 通过c++主字符**参数处理不同字符串编码的正确方法是什么
- 当函数指向一个函数时,如何将函数作为参数处理
- 为什么我的命令行参数处理崩溃我的程序