关闭标准输入后第二scanf如何工作

问题描述 投票:0回答:2

第二个scanf在下面的代码中如何工作

#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main()
{
    char buf[256];
    int i;

    write(1, "Hello World\n", strlen("Hello World\n"));
    dup(0);
    close(0);
    scanf("%s", buf);
    printf("Buffer:%s\n", buf);
    dup(3);
    scanf("%s", buf);
    printf("Buffer:%s\n", buf);
    return 0;
}

我们正在关闭标准输入(fd:0),那么dup(3)如何重新打开标准输入?

c linux io file-descriptor
2个回答
0
投票

[我认为,当您检查dup的这两次调用的返回值时,您会发现第一个为3,第二个为0。因此,在调用第二个scanf函数之前,文件描述符0再次与终端相关。] >


0
投票

dup的文档说,它对新描述符使用“编号最小的未使用文件描述符”。由于您刚刚关闭FD 0,因此下次使用dup时,0将是编号最小的未使用文件描述符,因此这就是重复FD的结局。并且由于您完全放回了摆脱的内容,因此scanf很乐意在此之后再次工作。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.