有没有一种方法可以使它在不使用c中的fprintf的情况下打印到终端以及输出文件?

有没有一种方法可以使它在不使用c中的fprintf的情况下打印到终端以及输出文件?,c,C,我正试图将我的程序打印到控制台以及c程序中的输出文件 我使用的是FILE*outfile=freopen(“out.txt”,“w”,stdout)使控制台输出重定向到输出文件。但是,重定向会阻止printf输出到终端。它只是编译并填写out.txt 是否有一种方法可以使其打印到终端以及out.txt,而无需使用fprintf或使用将管道连接到终端 intmain(){ 文件*infle=fopen(“in.txt”,“r”); FILE*outfile=freopen(“out.txt”,“w

我正试图将我的程序打印到控制台以及c程序中的输出文件

我使用的是
FILE*outfile=freopen(“out.txt”,“w”,stdout)
使控制台输出重定向到输出文件。但是,重定向会阻止
printf
输出到终端。它只是编译并填写
out.txt

是否有一种方法可以使其打印到终端以及
out.txt
,而无需使用
fprintf
或使用
将管道连接到终端

intmain(){
文件*infle=fopen(“in.txt”,“r”);
FILE*outfile=freopen(“out.txt”,“w”,stdout);
if(infle==NULL){
printf(“无法打开文件\n”);
出口(1);
}
readFunction(infle);
fclose(infle);
fclose(输出文件);
返回0;
}

No-在shell级别,您可以让程序只写入标准输出(根本不打开
out.txt
),然后运行
/yourprog | teeout.txt
,否则您必须安排在文件流上打开
out.txt
(例如,
file*ofp=fopen(“out.txt”,“w”);
,并检查打开是否成功),然后写入
stdout
ofp
@JonathanLeffler还有一个系统调用
tee
(用于实现
tee
实用程序)。@domen-仅在Linux上,而不是在标准C中。这个问题没有标记为Linux,代码不包含其他仅限Linux的构造。此外,手册页还讨论了文件描述符需要特别是管道,它们在本程序中不是管道。总的来说,
tee(2)
是不相关的-尤其是因为它是一个文件描述符函数,而不是一个文件流函数。@JonathanLeffler,但您可以为unix shell和实用程序提供建议吗?:P@dome:建议合适的替代品是完全公平的——只要你对为什么这些替代品在任何地方都不合适提出任何警告(如果它们的使用有限制的话)。由于我在评论中概述的多个原因(限于Linux;限于管道;使用文件描述符,而不是文件流),
tee(2)
系统调用非常有限,实际上没有多大帮助。(我认为这通常没有多大帮助;Linux中包含这样一个受限的系统调用有点奇怪-里奇和汤普森不会将其添加到第7版Unix中。)不-在shell级别,您可以让程序只写入标准输出(根本不打开
out.txt
)然后运行
/yourprog | tee out.txt
,否则您必须安排在文件流上打开
out.txt
(例如,
file*ofp=fopen(“out.txt”,“w”);
,并检查打开是否成功),然后写入
stdout
ofp
@JonathanLeffler还有一个系统调用
tee
(用于实现
tee
实用程序)。@domen-仅在Linux上,不在标准C中。这个问题没有用Linux标记,代码也不包含其他仅限Linux的构造。此外,手册页还讨论了文件描述符需要特别是管道,它们在本程序中不是管道。总的来说,
tee(2)
是不相关的-尤其是因为它是一个文件描述符函数,而不是一个文件流函数。@JonathanLeffler,但您可以为unix shell和实用程序提供建议吗?:P@dome:建议合适的替代品是完全公平的——只要你对为什么这些替代品在任何地方都不合适提出任何警告(如果它们的使用有限制的话)。由于我在评论中概述的多个原因(限于Linux;限于管道;使用文件描述符,而不是文件流),
tee(2)
系统调用非常有限,实际上没有多大帮助。(我认为这通常没有多大帮助;Linux中包含这样一个受限的系统调用有点奇怪——Ritchie和Thompson不会将它添加到第7版Unix中。)