将文件句柄作为参数

时间:2017-04-26 05:44:37

标签: c++ bash filehandle

在bash重定向中,我问question并得到如下答案。

  

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

现在,我很好奇这是怎么回事。我的意思是,程序(由C或C ++实现)如何获取文件句柄作为参数。我知道只有字符(例如char* argc[])可以作为参数。

3 个答案:

答案 0 :(得分:2)

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

当进程启动时(在类UNIX系统上),它打开了三个标准流:标准输入,标准输出和标准错误。如果您没有重定向任何内容,标准输入将来自键盘,标准输出和标准错误都将进入屏幕(通过某些设备连接,例如/dev)。

当您重定向标准流(输入,输出或错误)时,shell会打开该文件的句柄,然后执行必要的操作以将其设置为子项的指定标准流 - 例如,在系统上使用fork,它可以使用dup2为指定的文件设置自己的标准句柄,然后分叉子进程,然后(在父进程中)恢复其标准流(这是&#39; s不是处理它的唯一可行方法,只是一种可能性。)

答案 1 :(得分:1)

<file 不是参数。

<(同样>>>|重定向符号,其行为直接嵌入{{1} (以及其他炮弹)。

重定向意味着代替标准输入/输出(键盘和监视器),程序可以读取/写入文件bash<>),或 - 在>>的情况下 - 左侧程序的输出作为输入传递给正确的程序。

(假设相应的程序 - 在你的情况下为| - 被编程为从标准输入/输出读/写。对于程序员来说这是一个非常方便的方式,因为他/她不需要关心文件及其处理程序。)

答案 2 :(得分:1)

<字符表示输入流已从stdin重定向到file。程序不会将文件句柄作为参数,但stdin句柄会被命令行中提供的句柄file替换。请参阅Redirection on Wikipedia

的说明