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;