dup2复制而不是重定向

时间:2013-01-24 10:10:11

标签: c++

我在代码的开头有以下内容将stdout重定向到文件。我希望将字符串发送到两者标准输出和文件,而不是将发送到stdout的字符串重定向到文件。我如何在我的代码中执行此操作?

int main(int argc, char** argv)
{
    int file = open("out.txt", O_APPEND | O_WRONLY);
    if(file < 0)    return 1;
    if(dup2(file,1) < 0)    return 1;
    ...
}

更新

请注意,我的代码使用printf和其他c函数来写入stdout。

2 个答案:

答案 0 :(得分:3)

打开tee的管道,然后写入。{/ p>

// be careful to quote the file argument properly!
FILE *fp = popen("tee out.txt", "w");

您无法在POSIX系统中的文件描述符或stdio级别获得所需的行为。

答案 1 :(得分:0)

如果您希望它与printf一起使用,我只能看到两种可能性:只打印到stdout并使用tee实用程序将所有内容写入外部文件,或者编写包装器在printf左右调用printf两次,一次用于写入文件,一次用于写入stdout(以及用于代码中的每个其他c函数打印到stdout)。仅使用dup / dup2无法执行您想要的操作。