很简单, 打开文件/写入文件.
bash脚本: echo "message" >> /path/to/yourlogfile
c: 这个就不用说了吧, fopen("/path/to/yourlogfile", "a"); 然后调用fwrite
如果希望printf/fprintf(stderr,等标准输出/标准错误输出直接输出到日志, 用dup2:
#include <stdio.h>
#include <unistd.h>
int main()
{
FILE *fp = fopen("log.txt", "a");
if(fp){
int no = fileno(fp);
dup2(no, 1);
dup2(no, 2);
printf("stdout log\n");
fprintf(stderr, "stderr log\n");
fclose(fp);
}
return 0;
}
问题内容:在C和C++中把标准输出重定向到指定文件。
C++的实现
#include <ios>
#include <iostream>
#include <fstream>
//若使用包含.h文件方式则编译报错
using namespace std;
int main()
{
ofstream ofs("e:\\a.txt");
streambuf *osb = cout.rdbuf(ofs.rdbuf());
cout << "to file" << endl;
cout.rdbuf(osb);
cout << "to term" << endl;
return 0;
}
C实现1
#include <stdio.h>
#include <string.h>
void main()
{
FILE old_stdout;
FILE *fp = fopen("e:\\a.txt", "w");
memcpy(&old_stdout, &_iob[1], sizeof(FILE));
memcpy(&_iob[1], fp, sizeof(FILE));
/*call any functions..*/
printf("to file");
/**/
/*把缓冲刷新到文件*/
fflush(stdout);
memcpy(&_iob[1], &old_stdout, sizeof(FILE));
printf("to term");
fclose(fp);
}
C实现2::
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
freopen("intput.txt","r",stdin);
freopen("output.txt","w",stdout);
double a;
cin>>a;
cout<<"Jackie"<<endl;
return 0;
}