gpt4 book ai didi

c - "dup"函数,"more"和重定向

转载 作者:行者123 更新时间:2023-12-04 11:46:59 26 4
gpt4 key购买 nike

我对这个用于教育目的的小代码有疑问。我不明白它是如何工作的。

#include <stdio.h>
#include <fcntl.h>

#define FNAME "info.txt"
#define STDIN 0
int main(){

int fd;
fd = open(FNAME, O_RDONLY);

close(STDIN); //entry 0 on FDT is now free
dup(fd); //fd duplicate is now stored at entry 0
execlp("more","more",0);
}

通过启动此程序,它会在终端上打印文件“info.txt”的内容。我不明白为什么! “更多”和 STDIN(键盘或文件)之间的链接在哪里?

为什么如果我在没有参数且没有文件重定向的情况下使用更多,它只显示一个帮助屏幕,而重定向却使用文件作为输入?

最佳答案

dup 始终为您提供最低的可用文件描述符编号。

默认情况下,所有进程都有 012 用于 stdinstdoutstderr。您正在打开一个文件,您将从中获得一个文件描述符值 3。之后您关闭了 stdin。现在调用 dup 会给你一个最低的可用值作为 3 的重复文件描述符,所以你会得到 stdin 作为重复文件3 的描述符。

int main()
{
int fd, fd2;
fd = open(FNAME, O_RDONLY); //This will be 3

fd2 = dup(fd); //This will be 4 because 4 is the lowest available value
close(STDIN); //entry 0 on FDT is now free
dup(fd); //fd duplicate is now stored at entry 0
execlp("more","more",0);
}

这里显示文件内容的原因是,more 命令可以以两种方式使用。

  • 更多文件名
  • 命令 |更多

在您的 exec 中,您没有提供任何 filename 作为 more 命令的命令行参数。所以它在 pipe 模式下执行,通过从 stdin 读取它。

关于c - "dup"函数,"more"和重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14652617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com