C 如何通过程序更改标准输出

C 如何通过程序更改标准输出,c,linux,unix,stdout,C,Linux,Unix,Stdout,节目: #include<stdio.h> void main() { printf("Hello world\n"); } #包括 void main() { printf(“Hello world\n”); } 上述程序在stdout(终端)中将输出打印为“Hello world”。但是,我需要程序的其他输出 类似“output.txt”的文件。那么,有没有办法通过编程将流程的标准输出更改为其他文件呢 您可能希望在stdout上使用,但它会关闭stdout 您可以使用

节目:

#include<stdio.h>
void main()
{
    printf("Hello world\n");
}
#包括
void main()
{
printf(“Hello world\n”);
}
上述程序在stdout(终端)中将输出打印为“Hello world”。但是,我需要程序的其他输出 类似“output.txt”的文件。那么,有没有办法通过编程将流程的标准输出更改为其他文件呢

您可能希望在
stdout
上使用,但它会关闭
stdout

您可以使用以下选项:

并始终使用
fprintf(myout,
而不是
printf(
),有时可能在测试中使用
myout=fopen(“/tmp/someoutput.txt”);


至少通知用户您正在重定向他的
stdout
(可能通过发送一些消息到
stderr
等…)!

您可以利用来写入文件。在
w
a
模式下打开文件,然后使用
fprintf
写入。

您不需要所有这些
stdout
改变业务。您需要做的一切就是打开一个文件,然后对其进行写入。使用它。

首先,它是
int main(void)
用于主函数。对于实际问题,使用shell中的重定向操作符重定向输出。
fprintf()
是您的朋友。我实验了以下代码。dup2也不起作用。#include#include#void main(){int fd=open(“output.txt”,O#CREAT,0655);dup2(1,fd);printf(“Hello world\n”)}您忘了添加错误测试。我忘了将mode(第3)参数添加到
open
,更正了这一点
int newfd = open("/tmp/someoutput.txt", O_WRONLY|O_CREAT, 0640);
if (newfd<0) {
  perror("/tmp/someoutput.txt"); exit(EXIT_FAILURE); };
if (dup2(STDOUT_FILENO, newfd)) {
  perror("dup2"); exit(EXIT_FAILURE); }
FILE* myout = stdout;