我想重新发送stdout,stderr来文件和来自char *的stdin。我的目标是在C中制作。
当我运行此代码时:
int main(){
stdout=fopen("/home/user/file.txt","w");
printf("aaaa");
printf("\nbbbb");
system("/bin/bash");
sprintf("stdin","exit");
return 0;
}
文件没有一些字符串和bash从控制台获取参数。 bug在哪里?
答案 0 :(得分:3)
您不想分配给stdout
。相反,您(可能)想要使用freopen
,例如:freopen("/home/user/file.txt","w", stdout);
如果/当您在内部进行所有处理时,通常最好编写代码以接收FILE *
作为参数,并传递正确的值。当你有外部代码直接写入stdout
时,这不起作用。
编辑:我可能还应该提到freopen
的另一个严重问题 - 没有提供方法将其恢复到上一个流。您可以再次使用freopen
,并知道将写入控制台的路径(或其他)。
答案 1 :(得分:1)
stdout
不应该用作左值。尝试使用fprintf()函数而不是printf()来获得所需的效果。
至于从bash重定向stdout,你不能只用/usr/bin/bash >> /home/user/file.txt
调用它吗?
答案 2 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
int main(void){
int ret;
FILE *fp;
int stdout_bk;
stdout_bk = dup(fileno(stdout));
fp=fopen("/home/user/file.txt","w");
dup2(fileno(fp), fileno(stdout));
ret = system("/bin/bash");
//flushall();//for vc
fflush(stdout);//for gcc
fclose(fp);
dup2(stdout_bk, fileno(stdout));//restore
return 0;
}