C 使用dup()选择输出文件

C 使用dup()选择输出文件,c,io-redirection,dup,C,Io Redirection,Dup,所以我尝试使用dup()将标准输出重定向到一个文件 我知道我可以用fopen打开文件。由于dup2接受int,如何为file.txt指定文件描述符 使用返回fd而不是fopen使用返回fd而不是fopen获取文件描述符有两种可能: 然后调用打开的流 因此,在open()的情况下,如果成功,返回值就是您要查找的文件描述符: int fd = open("some_path", ...); 如果要使用fopen(),仍然可以检索与打开流关联的文件描述符,但需要调用函数fileno(): 您有两种

所以我尝试使用dup()将标准输出重定向到一个文件


我知道我可以用fopen打开文件。由于dup2接受int,如何为file.txt指定文件描述符

使用返回fd而不是
fopen

使用返回fd而不是
fopen
获取文件描述符有两种可能:

  • 然后调用打开的流

  • 因此,在
    open()
    的情况下,如果成功,返回值就是您要查找的文件描述符:

    int fd = open("some_path", ...);
    
    如果要使用
    fopen()
    ,仍然可以检索与打开流关联的文件描述符,但需要调用函数
    fileno()


    您有两种可能获得文件描述符:

  • 然后调用打开的流

  • 因此,在
    open()
    的情况下,如果成功,返回值就是您要查找的文件描述符:

    int fd = open("some_path", ...);
    
    如果要使用
    fopen()
    ,仍然可以检索与打开流关联的文件描述符,但需要调用函数
    fileno()


    fopen()。我尝试使用open,但得到的错误是“在C99中无效”,因此我暂时使用open()。我使用了
    FILE*out=fopen(“FILE.txt”,“a”);fd_new=文件号(输出),这就行了。然而,现在我没有得到我的终端运行后回来。我确实
    fclose(out)
    ,我想
    dup2
    恢复了它?@user2217060我给了你获得fd的一般方法。请看一下这里,我认为这与你想要实现的目标有关。谢谢@fedepad。我尝试使用open,但得到的错误是“在C99中无效”,因此我暂时使用open()。我使用了
    FILE*out=fopen(“FILE.txt”,“a”);fd_new=文件号(输出),这就行了。然而,现在我没有得到我的终端运行后回来。我确实
    fclose(out)
    ,我想
    dup2
    恢复了它?@user2217060我给了你获得fd的一般方法。请看一看这里,我认为这与你正在努力实现的目标有关。
    FILE *stream = fopen(some_file, "w");
    int fd = fileno(stream);