c - 是否有一个 API(如 dup)来复制 fstream,以便它可以

标签 c linux

我想将一个流写入一个 FILE *fp,同时该流也应该复制到另一个 fp 是否有更好的方法通过消除一个 fprintf 来编写我的调试函数?

const int logflag=1;
#define debug(args ...) if (logflag) { FILE *flog = fopen("test.log", "a+"); fprintf( flog, args); fclose(flog); } fprintf(stderr, args); 

int main()
{

    debug("test"); // writes test into both stderr and flog 
    debug("test2");
}

最佳答案

简短的回答是否定的,它是两个不同的文件指针,您一次只能写入一个。实际上,dup 仍然没有帮助你,因为它关闭了重复的文件描述符:

"dup2() makes newfd be the copy of oldfd, closing newfd first if necessary"

from the dup2 man-pages

但是,如果您的目标是同时将日志记录到屏幕和文件,那么使用 Linux 已经为您提供的工具会更好。通常好的做法(我不记得这个的来源)是让程序打印它的输出和调试到 stdout/stderr 并让调用用户确定如何处理输出。

在此之后,如果您的所有输出都转到 stderr,您可以在执行程序时执行以下操作:

$ ./program 2>&1 | tee file.log

关于c - 是否有一个 API(如 dup)来复制 fstream,以便它可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14511484/

相关文章:

c - 使用指向结构的指针在设备内存中设置一个数组;在库达

python - python 脚本 : Linux vs Solaris 上的 Setuid 位

linux - 如何在自定义 ssh 软件上使用 git?

c - 我的代码有什么问题吗? C

c - 如何将ULONG复制到PUCHAR中

c - 如何在结构内搜索并显示它

c - 变量文件可能尚未初始化

linux - 如何避免在物理内存中共享库文本节的多个副本?

linux - sed 命令不接受 ksh 中带有 '.' 的子字符串

python - 在 Python 中进行多线程/并行处理的最简单方法