3

我的代码开头有以下内容,用于将标准输出重定向到文件。我希望将字符串发送到 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 函数来写入标准输出。

4

2 回答 2

3

打开管道到tee,然后写入。

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

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

于 2013-01-24T10:20:57.827 回答
0

如果您希望它与 一起工作printf,我只能看到两种可能性:要么仅打印到标准输出并使用该tee实用程序将所有内容也写入外部文件,要么编写一个printf调用printf两次的包装器,一次用于写入文件,一次用于写入文件用于写入标准输出(以及您在代码中使用的所有其他 c 函数以打印到标准输出)。你不能只使用dup/做你想做的事dup2

于 2013-01-24T10:21:46.997 回答