我在代码的开头有以下内容将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。
答案 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
无法执行您想要的操作。