【问题标题】:Selection output file using dup()使用 dup() 选择输出文件
【发布时间】:2017-02-10 20:55:04
【问题描述】:

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

int save_fd;
save_fd=dup(1); //saves the current stdout
close(1); //closes stdout
dup2(file.txt, 1);//redirect output to file.txt

//output goes to file.txt

dup2(save_fd, 1); restore stdout
close(1);

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

【问题讨论】:

  • fopen() 返回 FILE* 指针,但 open() 返回 int

标签: c io-redirection dup


【解决方案1】:

使用open,它返回一个fd而不是fopen

【讨论】:

    【解决方案2】:

    好吧,你有两种可能获得文件描述符:

    1. open()

    2. fopen() 然后在打开的流上调用fileno()

    因此,对于open(),成功时的返回值就是您要查找的文件描述符:

    int fd = open("some_path", ...);
    

    如果您想使用fopen(),您仍然可以检索与打开的流关联的文件描述符,但您需要调用函数fileno()

    FILE *stream = fopen(some_file, "w");
    int fd = fileno(stream);
    

    【讨论】:

    • 谢谢@fedepad。我尝试使用 open 但收到错误消息,“在 C99 中无效”,所以我暂时使用 open()。我使用了FILE *out=fopen("file.txt", "a"); fd_new=fileno(out); 并且有效。但是现在我在运行后没有恢复我的终端。我做了fclose(out) 并且我认为dup2 恢复了它?
    • @user2217060 我给了你获取 fd 的一般方法。请在这里查看stackoverflow.com/questions/14543443/…,我认为这与您要实现的目标有关。
    猜你喜欢
    • 2020-02-28
    • 2016-09-05
    • 2015-10-04
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    相关资源
    最近更新 更多